express的请求问题
发布于 3 个月前 作者 cndota123 1356 次浏览 来自 问答

最近在学校做一个项目涉及到web服务器,开始学了node.js,但是在用ajax向服务器提交请求时出现了问题,无法接收到get请求(post也接收不到)看了好多文档都没解决只能来求助了,app.js和路由还有ajax的源码如下: ajax: function sensor(obj) { var j_data1 = [ [] ]; $.ajax({ type: “GET”, url: “/chart”, data: { node_name: $(obj).parent(‘ul’).parent(‘li’).children(‘a’).children(‘span’).innerText, sensor_name: $(obj).innerText }, datatype: “json”, success: function(data) { if(data.success) { j_data1[0] = eval(obj).sensor; j_data1[1] = eval(obj).sensor_up; j_data1[2] = eval(obj).sensor_down; return j_data1; } else { alert(“出现错误”) } } }) 路由因为接收不到请求只是单纯的写了 module.exports = function(app) { … app.get(’/chart’,function (req, res) { …处理}); } app.js var express = require(‘express’); var path = require(‘path’); var favicon = require(‘serve-favicon’); var logger = require(‘morgan’); var cookieParser = require(‘cookie-parser’); var bodyParser = require(‘body-parser’); var session=require(‘express-session’); var cassandracqlstore=require(‘connect-cassandra-cql’)(session); var cassandra=require(‘cassandra-driver’); var flash=require(‘connect-flash’); var routes = require(’./routes/index’); var app = express();

var client =new cassandra.Client({contactPoints:[‘localhost’],keyspace:‘iotserver’}); var config={client:client};

app.set(‘port’, process.env.PORT || 3000); app.set(‘views’, path.join(__dirname, ‘views’)); app.use(flash()); //app.engine(“html”,require(‘ejs’).__express); app.set(‘view engine’, ‘ejs’); //app.set(‘view engine’, ‘html’); app.use(favicon(__dirname + ‘/public/favicon.ico’)); app.use(logger(‘dev’)); app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.json()); app.use(cookieParser()); app.use(express.static(path.join(__dirname, ‘public’))); app.use(session({ secret:‘keyboard-cat’, store:new cassandracqlstore(config), resave:true, saveUnintialized:true}));

routes(app); app.listen(app.get(‘port’), function() { console.log('Express server listening on port ’ + app.get(‘port’)); }); 先谢谢了

21 回复

路由里的data要res.send出去吧?

@yzllee 这个我知道 但是现在问题是ajax发送的请求我无法获取,在服务器的日志上显示根本就没有ajax的请求,而且代码也没找到问题

是不跨域造成的

@liushaobo05 意思是我的ajax请求要跨域吗? 具体要修改什么? 谢谢

你的 JavaScript 没贴全吧。sensor 调用了没有?你贴出来的只是定义了 sensor 函数,没看到调用。

@IchiNiNiIchi ducument.getElementsByClassName(‘a1’).onclick=function(th){ var j_data1 = [ [] ]; $.ajax({ type: “GET”, url: “art”, data: { node_name: $(this).parent(‘ul’).parent(‘li’).children(‘a’).children(‘span’).innerText, sensor_name: $(this).innerText }, datatype: “json”, success: function(data) { if(data.success) { j_data1[0] = eval(obj).sensor; j_data1[1] = eval(obj).sensor_up; j_data1[2] = eval(obj).sensor_down; return j_data1; } else { alert(“出现错误”) } } });

};

@cndota123 好奇怪,复制了你的代码到编辑器,你的引号用的是全角?如果可能的话,你先用开发者工具看一下有没有 ajax 请求吧。

@IchiNiNiIchi 前端代码不是我写的,我是写后端的,我去试试

@cndota123 你可以先把引号改改,我复制下来双引号跟单引号都是全角。。。

@IchiNiNiIchi 试过了 不是全角的 估计是从编译器copy到网页的时候出了问题

@cndota123 你先在浏览器里面访问/chart路径 看看是前端的问题还是后端的问题

@Soontao 访问之后控制台没有得到get请求

@cndota123 可以看一下你的“./routes/index”这个文件么 我感觉是你某一个路由或者中间件忘记写next()了 http://www.expressjs.com.cn/guide/using-middleware.html

@Soontao 大致是这样 后来有些小的修改. var loginweb = require(’…/config/loginweb’); var registerweb = require(’…/config/registerweb’); var cassandra = require(’…/config/cassandra_support’); module.exports = function(app) { app.get(’/’,function (req, res) { res.render(‘login’,{user:req.session.user, success:req.flash(‘success’).toString(), error:req.flash(‘error’).toString()});}); app.get(’/login’,checknotlogin); app.get(’/login’,function (req, res) { res.render(‘login’,{user:req.session.user, success:req.flash(‘success’).toString(), error:req.flash(‘error’).toString()});}); app.post(’/login’,function(req,res){ var username=req.body.tuser; var upassword=req.body.tpass; console.log(username); console.log(upassword); console.log(req.session.user); if((username!=null)&&(upassword!=null)){ loginweb.loginweb(username,upassword,function(userresult){ if(userresult==1000){ req.session.user=username; req.flash(‘success’,‘success login’) console.log(req.session.user); res.redirect(‘chart’);} else if(userresult==1030){ req.flash(‘error’,‘Invalid password’);} else if(userresult==1050){ req.flash(‘error’,‘user not exist’);}}); } }); app.get(’/register’,checknotlogin); app.get(’/register’,function(req,res){ res.render(‘register’,{user:req.session.user, success:req.flash(‘success’).toString(), error:req.flash(‘error’).toString()});}); app.post(’/register’,function(req,res){ var username=req.body.tuser; var pass=req.body.tpass; var gateid=req.body.gateid; var permission=“vip”; console.log(username); console.log(pass); console.log(gateid); console.log(req.session.user); if(username!=null){ registerweb.registerweb(username,pass,gateid,permission,function(found){ if(found==2000){ res.redirect(‘login’);} if(found==2100){ res.render(“User already exist”);} });} }); app.get(’/chart’,checklogin); app.get(’/chart’,function(req,res,next){ var username = req.session.user; console.log(username); cassandra.findgate(function(result){ cassandra.nodenum(function(result1){ console.log(result1); res.render(‘chart’,{user:req.session.user,}); },result); },username); res.render(‘chart’,{user:req.session.user, success:req.flash(‘success’).toString(), error:req.flash(‘error’).toString()}); next(); }); app.post(’/chart’,function(req,res){ var time1=req.body.time1; var time2=req.body.time2; var datemin1=time1.substr(5,2); var datemin2=time2.substr(8,2); var datemin=datemin1+datemin2; var hourmin=time1.substr(11,2); var minmin=time1.substr(14,2); console.log(datemin); console.log(hourmin); console.log(minmin); var nodeid = ‘1’; var senor = ‘Humidity’; console.log(time1); console.log(time2); cassandra.findgate(function(err,result){if(err) throw err; else { cassandra.getdata(function(result1){ },result,) } },req.session.user); }); app.get(’/chart’,function(req,res){ if(req.query.name==“back”){ req.session.user==null; res.redirect(‘login’);}}) app.get(’/chart’,function(req,res){res.render(‘chart’)}) app.post(’/chart’,function(req,res){ var sensor=req.body.sensor; var node=req.body.node; var date1=req.body.date1; var date2=req.body.date2; if(sensor!=null&&node!=null&&date1!=null&&date2!=null){ res.render(sensor+node+date1+date2)}}) function checklogin(req,res,next){ if(!req.session.user){ req.flash(‘error’,‘you need store’); res.redirect(‘login’);} next();} function checknotlogin(req,res,next){ if(req.session.user){ req.flash(‘error’,‘you has store’); res.redirect(‘back’);} next();} };

@cndota123 ducument.getElementsByClassName(‘a1’).onclick = function () {…} 改成 $(‘a1’).click(function () {…})。

你可以用谷歌浏览器单步调试一下,看看反没反回data,或者是进没进入ajax函数,你可以看到每一个变量的数值,其实后端没有多大问题,nodejs个人认为比php还要简单,比java更是要简单10倍左右

@IchiNiNiIchi 我刚才问了前端的 他最后写的是$(#a1)或者$(.a1) 但是还是不能接受到请求

@cndota123 不是商业项目的话,把前端的页面上传到 github 上吧,这样别人可以帮你看一下。当然还是楼上说的,如果自己能在开发者工具里面调试最好。

@a69694510 没有 ajax的函数好像没有运行

@IchiNiNiIchi 也行,我等会让他发到git上面去 在把链接挂在这个问题下面, 谢谢回答的各位

chrome 安装postman调试

回到顶部