这是一个例子:
// Configuration
app.configure(function(){
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(__dirname + '/public'));
});
(等等。)
app.get('/memo', function(req, res) {
console.log("index");
Memo.find({}, function(err, data) {
if(err) return next(err);
res.render('index', { memos: data });
});
});
这是另一个:
app.get('/memo/list', function(req, res, next) {
console.log("get memos");
Memo.find({}, function(err, data) {
if(err) return next(err);
res.json(data);
});
});
取自于构建在节点上的简单记事本
这些是困扰我的问题:
next/next();
做什么的?如果不存在会发生什么?next
作为参数而第一部分不是参数?编辑:
Express使用具有回调的中间件函数(动作完成时调用的函数),而next具有此目的(这是触发Express堆栈中下一个中间件的回调)。所有Express中间件(与Connect兼容)具有3个参数:请求,响应,下一个(可选)。
例如,静态中间件提供静态文件,csrf中间件在接收POST请求时检查参数,并处理路由的路由器中间件(上面粘贴的内容是其中的一部分)。
每个中间件都可以完成其任务,并next
在满足某些条件的情况下调用队列中的中间件(例如,静态中间件不会调用下一个中间件,因为它会自行处理文件,以便路由器可以。)不会被打电话)。
在路由器中,您通常不调用next
它,因为它往往是最后执行的中间件(除非您需要基准测试之类的东西)。
如果您要创建一个拒绝访问所有未登录用户的中间件,则next()
仅在该用户登录后才必须调用(这样才能调用下一个中间件,在这种情况下,路由器可以使用户访问他们正在寻找的页面),否则您可能会将他们重定向到登录页面。
next
完全不接受任何参数或将错误作为参数。
编辑:根据您的配置,路由器在静态中间件之前,因此,如果要提供文件,则需要声明一个通配符路由,当路由不匹配时调用next():
app.get('*', function (req, res, next) {
// no route is matched
// so call next() to pass to the static middleware
next();
});
注意:我不建议您将静态文件服务器放在路由器之后,建议您将其放在路由器之前,以便可以定义自己的自定义404路由。
问题内容: 场景 :考虑以下是节点Web应用程序的代码部分。 问题 :我正在检查公正或公正哪一个。上面的示例代码对两者的工作原理完全相同,并且在执行方面没有任何区别。 问题 : 有人 可以对此加以说明,何时使用和何时使用以及一些重要的区别吗? 问题答案: 有人总是写是为了确保执行在触发回调后停止。 如果您不这样做,则可能要冒第二次触发回调的风险,这通常会造成灾难性的后果。您的代码可以正常使用,但我
我是Python的初学者,我正试图学习如何使用数据结构,如JSON对象,但我在试图从JSON对象中实际获取数据时遇到了困难。 我可以通过已经有的代码打印文件中的数据,但是我只想打印某个值,比如的值。我如何使用我已经有的代码打印这个?
描述 (Description) 这不是一个函数,它会导致当前循环迭代跳转到下一个值或控制语句的下一个评估。 不执行当前循环中的进一步语句。 如果指定了LABEL,则执行将跳转到LABEL标识的循环的下一次迭代。 语法 (Syntax) 以下是此函数的简单语法 - next LABEL next 返回值 (Return Value) 此函数不返回任何值。 例子 (Example) 以下是显示其基
++运算符为类String调用此方法。 它会递增给定String中的最后一个字符。 语法 (Syntax) String next() 参数 (Parameters) 没有 返回值 (Return Value) 字符串的新值 例子 (Example) 以下是此方法的使用示例 - class Example { static void main(String[] args) {
Next 是一个面向键盘的、可扩展的 Web 浏览器,专为高级用户设计。该应用程序具有键绑定(Emacs,VI),在 Lisp 中是完全可配置和可扩展的,并且对生产专业人员具有强大的功能。 特性: 选项卡的快速切换 通过模糊搜索,可以轻松地在打开的选项卡之间切换。如果你在找https://www.example.com,则只需输入ele, exa,epl,或任何其他匹配的字母序列。 快速导航 Ne
HarmonyOS Next中如何在arkts中格式化时间戳? 比如将1611081385000格式化为:2021-01-20 02:36:25