Node.js 请求正文有值,但我可以';我无法访问它
我目前正在做一些从angular2前端到express后端的用户注册。除了从请求主体获取值之外,其他一切都正常工作。看看这个 usersRoute.jsNode.js 请求正文有值,但我可以';我无法访问它,node.js,express,mongoose,Node.js,Express,Mongoose,我目前正在做一些从angular2前端到express后端的用户注册。除了从请求主体获取值之外,其他一切都正常工作。看看这个 usersRoute.js userRouter.route('/signup') .post(function(req, res){ console.log(req.body); mongoose.connect(url, function(err){ var user = { username: re
userRouter.route('/signup')
.post(function(req, res){
console.log(req.body);
mongoose.connect(url, function(err){
var user = {
username: req.body.username,
password: req.body.password,
firstname: req.body.firstname,
lastname: req.body.lastname,
gender: req.body.gender,
address: req.body.address,
contact: req.body.contact,
email: req.body.email
};
console.log(user);
users.create(user, function(err, results){
// res.redirect('http://localhost:4200/login');
//tobeChanged
console.log(results);
mongoose.disconnect();
});
});
});
在第一个console.log上,我试图查看req.body上是否有值,然后在第二个console.log上,我试图查看用户变量是否有值。事情就是这样
正如我们所看到的,用户变量没有值,但我通过req.body.name访问它。有人能帮我澄清一下吗
可选问题:这些问题困扰着我。如何摆脱它?您可以尝试在回调外部声明
user
对象
.post(function(req, res){
console.log(req.body);
var user = {
username: req.body.username,
password: req.body.password,
firstname: req.body.firstname,
lastname: req.body.lastname,
gender: req.body.gender,
address: req.body.address,
contact: req.body.contact,
email: req.body.email
};
mongoose.connect(url, function(err){...
如果不起作用,您可以使用将数据带入。问题:
这里您的请求对象的范围不同。您想在函数回调中使用请求对象
所以,您可以做的一件事是传递调用回调函数的值
解决方案:
改变这个
mongoose.connect(url,函数(err){
对此
mongoose.connect(url、函数(err、req){
希望这会有所帮助。谢谢您需要使用一些类似于库的正文解析器来完成此操作。修复程序将添加以下代码行:
var bodyParser = require('body-parser');
var urlencodedParser = bodyParser.urlencoded({ extended: false });
并将代码的前两行更改为:
userRouter.route('/signup')
.post(urlencodedParser,function(req, res){
原因是http post请求的主体不是由express提取的,因此需要另一个类似于库的主体解析器来执行该任务。是否可以将您的console.log(req.body);替换为对象属性上的循环,如for(var p in body.req){console.log(p))};来确认req.body实际有什么属性?它看起来像是有一个单独的属性,以跨越前三行的第一对撇号之间的所有内容命名,并带有一个空值。我做了循环,它显示了所有的值。请看这个。第一个控制台日志就是循环。第二个console log用于用户变量,第三个未定义的用于回调中的结果。我认为键/值对的第一个块实际上是作为一个单独的输出块打印的——正如我所暗示的。但这并不一定很明显。在循环中放置一个计数器,如var I=0;for(var p in body.req){I++};console.log(I);这很可能会吐出1。我仍然没有定义。我也把用户放在回调之外也没有运气。我的坏消息你能尝试用这个mongoose.connect检查一下吗(url,req,function(err){不知怎的我让它工作了。之前,我附加了一个带有x-www-form-urlencoded的头。我把它改为application/json,它工作得很好。:)