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