为什么我的 express 代码中的 next 函数不能正常工作?
Why isn't next function in my express code working properly?
所以基本上我正在尝试使用 next 同步执行功能但它没有同步发生:Route.JS
router.post('/era',function(req,res,next){
console.log("got request");
controlleri.book(req,res,next);
booking_controller.book(req,res);
console.log("done in server.js");
next();
});
controlleri.book
和 booking_controller.book
都有数据库调用但是
尽管在 controlleri.book
中添加了 next(),booking_controller.book
在第一个函数中调用 next 之前开始执行。
告诉我是否需要这两个功能。
编辑:
尝试使用异步库仍然无法同步代码:
router.post('/era',function(req,res){
console.log("got request");
async.series([
function(callback){
console.log("hi");
controlleri.book(req,res);
callback(null);
},
function(callback){
console.log("hias");
booking_controller.book(req,res);
callback(null);
}
]);
第二个功能在第一个功能完成之前开始
同步使用aync library进行doinf操作。
next() 是一个中间件,它告诉不应该返回请求,但是还有更多的函数要应用到 request.The 它运行的函数是异步执行的,因为这是节点的默认行为。
async.series([
controlleri.book(callback){
// do some stuff ...
callback(null, 'one');
},
booking_controller.book(callback){
// do some more stuff ...
callback(null, 'two');
}
],
// optional callback
function(err, results){
// results is now equal to ['one', 'two']
});
async.series 采用一组要按顺序(同步)执行的函数。每个函数中传递的回调是强制性的。
你的两个函数都将 req
、res
和 next
作为它们的参数,这是中间件函数的签名。此外,express 中间件是按顺序执行的。为什么不将您的每个函数都放入它们自己的中间件中,并按照您需要它们的执行顺序?
// POST executes controlleri.book
// then booking_controller.book,
// then the log code
router.post('/era', controlleri.book, booking_controller.book, function(req, res, next) {
console.log("done in server.js");
});
这样,controlleri.book
中的next
将是booking_controller.book
,而booking_controller.book
中的next
将是最后一个记录[=19=的方法]
所以基本上我正在尝试使用 next 同步执行功能但它没有同步发生:Route.JS
router.post('/era',function(req,res,next){
console.log("got request");
controlleri.book(req,res,next);
booking_controller.book(req,res);
console.log("done in server.js");
next();
});
controlleri.book
和 booking_controller.book
都有数据库调用但是
尽管在 controlleri.book
中添加了 next(),booking_controller.book
在第一个函数中调用 next 之前开始执行。
告诉我是否需要这两个功能。
编辑:
尝试使用异步库仍然无法同步代码:
router.post('/era',function(req,res){
console.log("got request");
async.series([
function(callback){
console.log("hi");
controlleri.book(req,res);
callback(null);
},
function(callback){
console.log("hias");
booking_controller.book(req,res);
callback(null);
}
]);
第二个功能在第一个功能完成之前开始
同步使用aync library进行doinf操作。
next() 是一个中间件,它告诉不应该返回请求,但是还有更多的函数要应用到 request.The 它运行的函数是异步执行的,因为这是节点的默认行为。
async.series([
controlleri.book(callback){
// do some stuff ...
callback(null, 'one');
},
booking_controller.book(callback){
// do some more stuff ...
callback(null, 'two');
}
],
// optional callback
function(err, results){
// results is now equal to ['one', 'two']
});
async.series 采用一组要按顺序(同步)执行的函数。每个函数中传递的回调是强制性的。
你的两个函数都将 req
、res
和 next
作为它们的参数,这是中间件函数的签名。此外,express 中间件是按顺序执行的。为什么不将您的每个函数都放入它们自己的中间件中,并按照您需要它们的执行顺序?
// POST executes controlleri.book
// then booking_controller.book,
// then the log code
router.post('/era', controlleri.book, booking_controller.book, function(req, res, next) {
console.log("done in server.js");
});
这样,controlleri.book
中的next
将是booking_controller.book
,而booking_controller.book
中的next
将是最后一个记录[=19=的方法]