Javascript node.js next ()

我在 node.js 中看到很多使用 next的地方。

它是什么,它来自哪里? 它是做什么的? 我可以使用它的客户端吗?

不好意思,这里用了这个例子: Http://dailyjs.com/2010/12/06/node-tutorial-5/

查找 loadUser 函数。

145332 次浏览

这似乎是 Node.js 控制流代码中的一个变量变数命名原则,其中对下一个要执行的函数的引用被给予一个回调,以便在完成后启动。

例如,请参阅这里的代码示例:

让我们看看你发布的例子:

function loadUser(req, res, next) {
if (req.session.user_id) {
User.findById(req.session.user_id, function(user) {
if (user) {
req.currentUser = user;
return next();
} else {
res.redirect('/sessions/new');
}
});
} else {
res.redirect('/sessions/new');
}
}


app.get('/documents.:format?', loadUser, function(req, res) {
// ...
});

loadUser函数在其第三个参数中需要一个函数,该参数绑定到名称 next。这是一个普通的函数参数。它保存对下一个要执行的操作的引用,并在完成 loadUser之后调用(除非找不到用户)。

在这个示例中,名称 next没有什么特别之处; 我们可以给它取任何名称。

在需要连续执行操作的情况下传递回调时使用这个变数命名原则,例如,scan 目录-> read file data-> 对数据进行处理。这优先于深度嵌套回调。在 Tim Caswell 的 HowToNode博客上,以下文章的前三部分给出了一个很好的概述:

Http://howtonode.org/control-flow

另见该帖子第二部分的 连续动作部分:

Http://howtonode.org/control-flow-part-ii

它基本上类似于 快递在执行和完成某部分代码后使用的回调,你可以使用它来确保代码的一部分已经完成,以及接下来要做什么,但是始终要注意,你只能在每个 休息块中执行一个 res.send..。

所以你可以这样做,作为一个简单的 next()例子:

app.get("/", (req, res, next) => {
console.log("req:", req, "res:", res);
res.send(["data": "whatever"]);
next();
},(req, res) =>
console.log("it's all done!");
);

当你希望在你的应用程序中有一个中间件时,它也是非常有用的..。

要加载中间件函数,请调用 app.use () ,指定 例如,下面的代码加载 在路由到根路径(/)之前执行 myLogger 中间件函数。

var express = require('express');
var app = express();


var myLogger = function (req, res, next) {
console.log('LOGGED');
next();
}


app.use(myLogger);


app.get('/', function (req, res) {
res.send('Hello World!');
})


app.listen(3000);