Node.js 来自mongoose回调的Express js res.redirect()不工作
我想做的是 从Node.js 来自mongoose回调的Express js res.redirect()不工作,node.js,express,mongoose,Node.js,Express,Mongoose,我想做的是 从/expense/new页面提交POST请求至/expense/newPost 在Expressjs上,以这种方式处理 app.post('/expense/newPost', function(req, res) { ... 继续,使用mongooseI将集合验证为 tmpExp = new Expense(req.body); tmpExp.validate(function(err) { if(err || !isValidForm) { req.sessio
/expense/new
页面提交POST
请求至/expense/newPost
在Expressjs上,以这种方式处理
app.post('/expense/newPost', function(req, res) { ...
继续,使用mongoose
I将集合验证为
tmpExp = new Expense(req.body);
tmpExp.validate(function(err) {
if(err || !isValidForm) {
req.session.form.errField = _.extend(req.session.form.errField, (err.errors || err ));
req.session.rePop = req.body;
res.redirect('/expense/new');
} else {
console.log('now saving') // successfully logs here.
tmpExp.save(expPost, function(err2, savedDoc) {
if(err2) {
req.session.flash = {
global: true
, css: "error"
, message: "Internal Server Error"
}
res.redirect('/expense/new');
} else {
res.redirect('/expense/new?success=' + savedDoc.bill_id);
}
});
}
});
为了清晰起见,我删除了一些验证代码
现在的问题是,通过浏览器提交POST请求后,数据成功保存在mongodb中,但浏览器没有重定向,只是等待服务器的响应假设验证码是从该文件中剥离的唯一内容,
res
没有定义。我建议您只返回Error或null,并在父函数中执行剩余的逻辑,其中可能存在res。这通常也是一个很好的实践,因为您的模型是可重用的(模型中没有路径部分)假设验证代码是您从该文件中剥离的唯一内容,则未定义res。我建议您只返回Error或null,并在父函数中执行剩余的逻辑,其中可能存在res。这通常也是一个很好的做法,因为您的模型是可重用的(模型中没有路径部分)您的保存回调没有正确传入
tmpExp.save(expPost, function(err2, savedDoc) {
应该是:
tmpExp.save(function(err2, savedDoc) {
您的保存回调未正确传入
tmpExp.save(expPost, function(err2, savedDoc) {
应该是:
tmpExp.save(function(err2, savedDoc) {
如果你查看Chrome的网络检查器,你能看到任何位置标题吗?代码中的其他内容是否已经发送了数据?@loganfsmyth在Chrome的network inspector请求中,在
newPost
上显示挂起2-3分钟,然后No data received
页面显示(我的意思是,由于在预定义的时间内没有收到数据,浏览器会关闭连接)@loganfsmyth抱歉,服务器在未发送任何数据的情况下关闭了连接,如chrome的未接收到数据
页面所示Error 324(net::ERR\u EMPTY\u RESPONSE):服务器在未发送任何数据的情况下关闭了连接
处理程序中没有任何res.end()
调用,是吗?在这里发布可能太多了,但如果您准备在JSFIDLE或其他东西中发布您的整个处理程序,那么这可能会很有用。@loganfsmyth我认为您不需要在res.redirect()之后调用res.end()
,如果您查看Chrome的网络检查器,您可以看到任何位置标题吗?代码中的其他内容是否已经发送了数据?@loganfsmyth在Chrome的network inspector请求中,在newPost
上显示挂起2-3分钟,然后No data received
页面显示(我的意思是,由于在预定义的时间内没有收到数据,浏览器会关闭连接)@loganfsmyth抱歉,服务器在未发送任何数据的情况下关闭了连接,如chrome的未接收到数据
页面所示Error 324(net::ERR\u EMPTY\u RESPONSE):服务器在未发送任何数据的情况下关闭了连接
处理程序中没有任何res.end()
调用,是吗?在这里发布可能太多了,但如果您准备在JSFIDLE或其他东西中发布您的整个处理程序,那么这可能会很有用。@loganfsmyth我认为您不需要在res.redirect()之后调用res.end()
,
请参阅对这个答案的评论否,这不在app.post('/expense/newPost',function(req,res)中的模型中{
No,这不在app.post('/expense/newPost',function(req,res){