Node.js async.series/async.瀑布是否在post方法中工作?
我在post方法中使用了async.series,但它似乎不起作用,当调用post请求时,页面显示404未找到Node.js async.series/async.瀑布是否在post方法中工作?,node.js,asynchronous,post,async.js,Node.js,Asynchronous,Post,Async.js,我在post方法中使用了async.series,但它似乎不起作用,当调用post请求时,页面显示404未找到 router.route('/brandinsert') .post((req, res, next) => { console.log("inside post"); //terminates here async.series({ one: (callback) => { uploadImageOne(req, r
router.route('/brandinsert')
.post((req, res, next) => {
console.log("inside post"); //terminates here
async.series({
one: (callback) => {
uploadImageOne(req, res, (err) => {
console.log('Inside uploadImageOne');
callback(req, res, err);
});
},
two: (callback) => {
uploadImageTwo(req, res, (err) => {
console.log('Inside uploadImageTwo');
callback(req, res, err);
});
},
}, (req, res, err) => {
console.log('Inside req,res,err'); //does not reach here
if(err){
console.log('error :' + err); //does not reach here
if (err == 'Error: imageExtensionError') {
res.json({
status: false,
msg: "File has invalid extension"
});
} else if (err == "Error: File too large") {
res.json({
status: false,
msg: "File size exceed the limit,Allowed limit is 3 MB"
})
} else {
console.log("err else section:" + err);
res.json({
status: false,
msg: genericErrorMessage
})
}
}else{
console.log("Inside else of insert");
let brandHeaderImg = req.body.brandHeaderImg;
let brandLogoImg = req.body.brandLogoImg;
let errorArray = [];
let msg = null;
//insert images into db
}
});
})
我不明白我做错了什么,有人能帮我吗?我是node.js的新手,如果这些问题看起来很愚蠢,请原谅。异步库中的回调需要调用为:
callback(err, arg1, arg2, arg3);
首先是err
参数,然后是其他可选参数。如果没有错误,并且希望继续处理,则传递错误的null
:
callback(null, arg1, arg2, arg3);
仅供参考,Javascript开发的趋势是“promisify”所有异步操作(创建一个返回承诺的包装器,而不是使用普通回调),然后使用承诺和
async/await
功能进行异步控制流和错误处理。我强烈建议以这种方式编写新代码,而不是在传统回调中使用异步库
节点v10甚至包括一个预期版本的
fs
库,现在越来越多的节点内部正在使用promises和async/await
。底部回调中的任何代码是否使用res
创建响应?是的,async.series()
和async.瀑布()
在路由处理程序中工作正常(如果您正确使用它们)。如果我们能看到这个路由器处理程序的所有真实代码,我们会有更好的帮助。只有很少的真实代码,我们所能做的就是猜测。这是我的第一个猜测。是否在.post()
处理程序中调用next()
?如果是这样的话,在异步代码完成之前,这将进入默认的404处理程序。如果您自己发送响应,并且不希望发生进一步的路由,则不要调用next()
@PatrickRoberts请检查我刚才所做的编辑,这根本没有帮助。它仍然只是伪代码。您可以在async.series()
调用的完成回调中放置console.log()
,以查看它是否到达那里。我们无法进行任何测试。@jfriend00不,我没有在内调用next。post()
我更改了调用异步库的方式,但问题仍然存在。我同意你关于承诺的趋势。但我想用async.series或async.failter实现它