关于处理http request中next()与return next()的一点小问题
发布于 8 年前 作者 chlrAndyBear 6815 次浏览 来自 问答

个人在用nodejs express做一些小项目,在开发和学习的过程中遇到一点小疑问,如下: 处理http request过程中,会有一些middleware来做一些patch和验证的工作,执行通过之后一般会调用next()来进行下一步的处理, 但是就next()这一步遇到了两种写法,有的直接调用next() 然后return,有的直接return next()。 所以想请教一下,next(); return; 和 return next();这两种写法,有什么区别吗?会对之后的操作带来什么影响吗?

8 回复

没什么区别,express项目中如果需要记录程序状态一般把状态信息绑定到req或res对象上,不会把状态绑定到中间件的返回值上

这样,实际应用中确实是把中间件绑定到req和res上……

return next(),在这里等同于是next后然后return 由于这里的返回值不会被用到,所以就是两个其实是等同的。

写法比较简洁而已,你会在js中看到各种这样的写法,不知道是谁带起来的

结果一样,执行过程不一样 自豪地采用 CNodeJS ionic

@AnzerWall 原来是这样……还以为是不同写法会有不同的用途……

//第一种  return next();
app.use( function(req, res, next) {
	....处理业务逻辑代码
 	return next();	
	console.log('hello~'); //这行不会被打印。因为上一行已经 return了。
});
//第二种  next(); return;
app.use( function(req, res, next) {
	....处理业务逻辑代码
 	next();	
	console.log('hello~'); //这行会被打印。
	return;
	console.log('hello cnodejs!'); //这行不会被打印。	
});

app.use( function(req, res, next) {
	....处理业务逻辑代码
 	next();	return;// 这样跟  return next(); 效果一样 
	console.log('hello~'); //这行不会被打印。
});


有区别的

来自酷炫的 CNodeMD

回到顶部