在Node.js Express中,“middleware function”中的“next”参数是如何工作的?[关闭]

jbose2ul  于 2023-06-05  发布在  Node.js
关注(0)|答案(2)|浏览(192)

已关闭,此问题需要更focused。目前不接受答复。
**想改善这个问题吗?**更新问题,使其仅通过editing this post关注一个问题。

6天前关闭
Improve this question
我正在使用Nodejs和“Express js”,现在我正在使用“中间件功能”,这是我目前的代码

const express = require('express')
const app = express()

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

app.use(myLogger)

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

我对“下一个”参数感到困惑,我有以下关于中间件功能的问题
1.“下一个”有什么用?这是重定向到“下一个中间件功能”吗?如果是,如何处理?
1.如果不存在“第二中间件”,那么会发生什么?
1.如果我们不使用“下一步”,那么会发生什么?
1.我们可以重定向到“next”中的自定义中间件吗?

bvk5enib

bvk5enib1#

1.是的,调用next很重要,因为这允许express.js移动到下一个中间件,否则它将处于悬空位置,应用程序将无法正常工作。
2)您的请求将到达路由处理程序,您将得到一个消息'Hello World'的响应
3)如果你不调用下一个,请求将被终止,应用程序将保持挂起
4)是的,您可以使用next重定向到自定义中间件函数。无论何时使用参数调用next,expresses都会将其作为错误消息。您可以定义、自定义错误处理中间件,以根据您的需要指导它。

oogrdqng

oogrdqng2#

简单地说,next()意味着继续第一个匹配路由的路径。如果您从未调用next()或response,则请求将停留在该中间件上。中间件的存在有两个原因:
1.操作数据,您可以添加额外的值到例如request.body供以后使用
1.阻塞,如果出现意外情况,您可以在不继续路径匹配路由的情况下进行响应。
例如:

// request sent to /users/user1

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

router.use(myLogger);

router.post('/users*', (request, res, next) => {
    if (!isAdmin(request)) {
        return res.status(401).json();
    }

    return next();
})

router.post('/users/:id', (request, res, next) => {
    res.json(getUser());
})

function getUser() {
    return { name: 'Lorem', surname: 'Ipsum' }
}

function isAdmin(request) {
    return true;
}

相关问题