Node.js Express无法获取发布数据

当我发布到/ insertUser和它的schema.saveUser(req)它找不到正确的数据。 我正在使用节点检查器,它无法find我的发布数据。 我也尝试了req.body,它什么都没发现。 我正在发送一个json

var express = require('express'); var bodyParser = require('body-parser'); var schema = require("./schemas"); var app = express(); app.get('/hello.txt', function(req, res){ res.send('Hello World2'); }); app.post('/insertUser', function(req, res){ console.log("Request handler 'insertUser' was called."); //console.log(req.body); schema.saveUser(req); response.writeHead(200, {"Content-Type": "text/plain"}); res.send("You've sent the text: " + req); response.write("The following data has been saved to the database: " + jsonString); res.end(); }); var server = app.listen(8888, function() { console.log('Listening on port %d', server.address().port); }); function saveUser(postData){ var jsonObj = JSON.parse(postData); var newUser = new User({ name: jsonObj.name, email: jsonObj.email, photoURL: jsonObj.photourl, groups: jsonObj.groups }); newUser.save(function(err, newUser) { if (err) return console.error(err); console.dir(newUser); }); } 

编辑:

  SyntaxError: Unexpected token o at Object.parse (native) at Object.saveUser (schemas.js:42:22) at Object.handle (server.js:25:9) at next_layer (route.js:103:13) at Route.dispatch (route.js:107:5) at c (index.js:195:24) at Function.proto.process_params (index.js:251:12) at next (index.js:189:19) at next (index.js:166:38) at Layer.urlencodedParser [as handle] (index.js:70:44) 

我认为在Express 4中,您需要使用router对象而不是app来定义路线…就像这样:

 var express = require('express'); var bodyParser = require('body-parser'); var schema = require("./schemas"); var app = express(); var router = express.Router(); router.get('/hello.txt', function(req, res){ res.send('Hello World2'); }); router.post('/insertUser', function(req, res){ console.log("Request handler 'insertUser' was called."); }); ... 

在客户端

Cannot GET /insertUser意味着这是一个GET路由,当点击一个链接或input页面URL时,浏览器调用它。

但是你指定了app.post('/insertUser'...这意味着只有在使用POST方法时才会调用路由(例如在提交表单时使用,在单击链接时不要使用)

如果这是表单的结果,请不要忘记指定方法( <form method="post"> )。 同样的阿贾克斯电话。

如果你想在开发模式下testing,你可以使用邮递员在铬上轻松地调用邮政路线。 如果你没有铬使用curl。

后端

express express parser不包含在Express 4.0中,所以你需要安装它然后使用它:

 var express = require('express'); var bodyParser = require('body-parser'); var schema = require("./schemas"); var app = express(); app.use(bodyParser()); app.get('/hello.txt', function(req, res){ res.send('Hello World2'); }); 

那么你可以使用req.body