Express app.use

6

我一直在阅读文档/链接,但并不真正理解app.use及其用法。我知道它是connect的一部分,但我真的不明白。

例如:

// ignore GET /favicon.ico
app.use(express.favicon());
// add req.session cookie support
app.use(express.cookieSession());
// do something with the session
app.use(count);

请问您能否解释一下这三个问题的含义?如果基于(1),那么这是否意味着app.use不过就是app.get的另一种形式?app.use(count)是什么意思以及何时执行或调用count函数?看起来很简单,但我还是不明白答案。

// ignore GET /favicon.ico
app.use(express.favicon());

// pass a secret to cookieParser() for signed cookies 
app.use(express.cookieParser('manny is cool'));

// add req.session cookie support
app.use(express.cookieSession());

// do something with the session
app.use(count);

// custom middleware
function count(req, res) {
1个回答

8
当你调用app.use()时,你需要传入一个函数来处理请求。当请求进来的时候,Express会按照顺序执行所有的函数,直到请求被处理完成。 express.favicon是一个简单的函数,当请求时返回favicon.ico。这实际上是如何开始使用这个模式的好例子。你可以通过查看源代码来查看它的源代码:node_modules/express/node_modules/connect/lib/middleware/favicon.js express.cookieSession是用于支持会话数据的一些中间件,由客户端的cookie键控。
我不知道count的作用是什么...这是你自己的代码吗?无论如何,如果有任何不清楚的地方,请让我知道。

1
谢谢您的解释。所以"app.use(),你传递一个函数来处理请求",在我的例子中我没有请求,只有要调用的函数。那么它会采用默认的"GET"吗?是的,count是一个用户定义的函数,格式为function count(req, res)。您能否解释一下何时调用app.use(express.cookieSession());?我的问题是这里没有req。那么它将基于什么被调用呢? - The Learner
你的意思是什么?你不使用Express来处理HTTP请求吗?通过app.use加载的中间件将被调用,无论请求是什么。这并不意味着它总是会处理请求...这取决于中间件是否决定处理请求或让下一个函数处理它。 - Brad
1
它们都被称为中间件,按照设置app.use的顺序进行调用,直到其中一个中间件决定处理该请求。如果您正在访问count,则会调用您的 express.cookieSession。另请参阅:https://dev59.com/_moy5IYBdhLWcg3wMLOj#8711139 - Brad
好的,现在我明白了...我的最后一个问题是:在“app.use(express.cookieParser('manny is cool'));”中,我没有下一个。我在您提供的路径中看到了定义:module.exports = function cookieParser(secret){req是接收到消息的内容。如果它有cookie,根据定义,它将next。下一个值在哪里?它去哪里了?实际上,我看到在我的示例中调用了app.use(count);,这是在cookie之后。 - The Learner
1
是的,没错。是否调用下一个函数取决于中间件。像你拥有的 cookie 处理程序这样的中间件将始终调用下一个函数。 - Brad
显示剩余8条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接