我一直在使用node.js,express,mongodb中的基本CRUD应用程序并使用教程我尝试自行设置它。我不确定为什么我的POST请求得到302响应。
router.route('/')
.get(function(req, res, next) {
mongoose.model('User').find({}, function(err, users) {
if (err) {
return console.error(err);
} else {
res.format({
html: function() {
res.render('users/index', {
title: 'All Users',
"users": users
});
},
json: function() {
res.json(users);
}
});
}
});
})
.post(function(req,res) {
// get values from post request
var name = req.body.name;
var iscool = req.body.iscool;
// call the create function from mongoose
mongoose.model('User').create({
name: name,
iscool: iscool
}, function(err, user) {
if (err) {
res.send("There was a problem connecting to db");
} else {
console.log(res.statusCode);
console.log('Creating POST for ' + user.name);
res.format({
html: function() {
// if successful, set header address bar to "users"
res.location("users");
res.redirect("/users");
},
json: function() {
res.json(user);
}
});
}
})
});
我在console.log(res.statusCode)中返回200 OK响应,但在我的Chrome开发工具中,我的网络请求得到了302响应。我真的很困惑我应该在哪里寻找我的错误。我的表单操作设置为/ users,路由器使用(/ users)用户控制器和路由。
以下是表格:
<form name="adduser" action="/users" method="post">
<div>
<label for="name">Name:</label>
<input type="text" id="name" name="name">
</div>
<div>
<label for="iscool">Are you cool?</label>
<input type="checkbox" value="true" name="iscool">
<div>
<div>
<button type="submit">Submit</button>
</div>
任何帮助都是指定的,并为间距道歉!
答案 0 :(得分:1)
res.redirect("/users");
执行此操作时,它将返回302状态代码。像上面的get请求中那样使用res.render
来获得200回。
答案 1 :(得分:1)
不确定您的app应用程序的中间件是否已有此功能,但您可以尝试使用 body-parser 中间件来解析 application / x-www-form-urlencoded :
在您的终端中:
npm install --save body-parser
您的表单:
...
<form method="POST" action="/users" enctype="application/x-www-form-urlencoded">
...
然后在您的应用中:
...
var bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
...
答案 2 :(得分:0)
如果您想重定向而不是呈现,只需删除普通res.format()
的{{1}}。以你的方式在他们之间混合将永远不会奏效。
<强>替换强>
res.redirect()
。通过强>
res.format({
html: function() {
// if successful, set header address bar to "users"
res.location("users");
res.redirect("/users");
},
json: function() {
res.json(user);
}
});