Nodejs node express里的 app.use 怎么理解啊?是c++里面类似include么?有点奇怪 求指点

Nodejs node express里的 app.use 怎么理解啊?是c++里面类似include么?有点奇怪 求指点

node express里的 app.use 怎么理解啊?是c++里面类似include么?有点奇怪 求指点

比如app.use(session({secret: ‘2C44774A-D649-4D44-9535-46E296EF984F’}))

这句时候,是不是session就是全局变量了?

4 回复

app.use 在 Node.js 的 Express 框架中是一个非常重要的概念,它用于注册中间件函数。与 C++ 中的 #include 不同,app.use 并不是简单地包含一个文件或引入一个头文件,而是在请求处理流程中添加一个中间件函数。

app.use 的作用

app.use 可以用于以下几种情况:

  1. 全局中间件:可以用于处理所有路由。
  2. 路径绑定中间件:可以绑定到特定路径前缀,例如 /api 下的所有请求。
  3. 错误处理中间件:专门用于处理错误的中间件。

示例代码

假设我们有一个简单的 Express 应用程序,并使用会话中间件来管理用户会话。

const express = require('express');
const session = require('express-session');

const app = express();

// 使用会话中间件
app.use(session({
    secret: '2C44774A-D649-4D44-9535-46E296EF984F',
    resave: false,
    saveUninitialized: true
}));

// 定义一个简单的路由
app.get('/', (req, res) => {
    // req.session 是通过会话中间件设置的,而不是全局变量
    if (!req.session.views) {
        req.session.views = 0;
    }
    req.session.views++;
    res.send(`你已经访问了这个页面 ${req.session.views} 次`);
});

// 启动服务器
app.listen(3000, () => {
    console.log('服务器运行在 http://localhost:3000');
});

解释

  1. 会话中间件app.use(session({...})) 将会话中间件应用到所有路由。这使得每个请求对象 (req) 都有 req.session 属性,用于存储会话数据。

    • secret:用于加密会话数据的密钥。
    • resave:是否在每次请求时重新保存会话(即使没有修改)。
    • saveUninitialized:是否在会话被初始化之前保存会话。
  2. 路由处理:在定义的路由处理函数中,你可以通过 req.session 访问会话数据。这并不是全局变量,而是每个请求的上下文的一部分。

因此,app.use 并不是引入全局变量,而是为应用程序添加功能,使每个请求都可以使用这些功能。


不是。app.use() 是往 app 注册中间件(钩子)。

详见:http://xingrz.me/2013/2013-12-10/life-of-a-stream.html

谢谢楼上

app.use 在 Node.js 的 Express 框架中并不是类似于 C++ 中的 #include。它主要用于加载中间件函数,这些中间件可以处理 HTTP 请求,并且可以在请求的不同阶段进行操作。app.use 可以用来配置应用级别的中间件,或者为特定路径下的路由添加中间件。

例如,当你使用 app.use(session({...})) 这一行代码时,你实际上是在告诉 Express 应用程序应该使用名为 session 的中间件来处理每个请求。这里传入的参数是一个配置对象,用于设置会话管理的行为。

但需要注意的是,这并不意味着 session 成为了一个全局变量。相反,它是作为中间件被注册到应用上的,这意味着它将被应用于所有匹配的路由请求。

下面是一个简单的示例代码:

const express = require('express');
const session = require('express-session');

const app = express();

// 注册 session 中间件
app.use(session({
    secret: '2C44774A-D649-4D44-9535-46E296EF984F',
    resave: false,
    saveUninitialized: true
}));

app.get('/', (req, res) => {
    // req.session 用于访问会话数据
    if (!req.session.views) {
        req.session.views = 1;
    } else {
        req.session.views += 1;
    }
    res.send(`Views: ${req.session.views}`);
});

app.listen(3000, () => console.log('Server running on port 3000'));

在这个例子中,我们首先引入了 expressexpress-session 模块,然后创建了一个 Express 应用实例。接着,我们通过 app.use(session({...})) 注册了会话中间件。这样,在后续的路由处理函数中(如对根路径的 GET 请求),我们可以利用 req.session 来访问和修改会话数据。

回到顶部