首页 > 解决方案 > 在 express 中通过中间件传递参数

问题描述

我在通过几个中间件快速传递参数时遇到问题,这是我的中间件之一:

exports.checkParentReqs=async(req,res,next)=>{
try {
    const reqExist = await ParentReqsToConnect.find({ email: req.user.email }).populate({
        path: 'userId',
        select: 'firstName lastName'
    })
    req.parentReqs = reqExist
    next()
    console.log(req.parentReqs)
   
} catch (error) {
    next (new Error (error.message))
  
}

}

这是包含上述中间件的特定路线中的中间件链:

    router
.route('/feed/getFeed')
.post(
    AuthController.protect,
    AuthController.isStudent,
    NewsController.getGoogleNews,
    TransactionsForFeedController.getRecentTransactions,
    TransactionsForFeedController.totalSpendingLimitsAlert,
    TransactionsForFeedController.categorizedSpendingLimitsAlert,
    BehavioralItemController.createTaskBihavioral,
    BehavioralItemController.createBankBihavioral,
    BehavioralItemController.createCompareUniBihavioral,
    BehavioralItemController.createConnectionBihavioral,
    BehavioralItemController.createPrivBudgetBihavioral,
    AlertController.ownUniAlert,
    AlertController.uniBudgetAlert,
    AlertController.uniBudgetSetPeriodAlert,
    AlertController.accountsAlert,
    AlertController.connectionAlert,
    AlertController.getAlerts,
    ParentReqsToConnectController.checkParentReqs,
    TaskController.getTasksForFeed,
    FeedController.getFeed,
    )

倒数第三个在中间件之上。这是最后一个中间件 FeedController.getFeed :

exports.getFeed = async (req, res, next) => {
    try {
        console.log(req.parentReqs)

        const feed = [
            ...req.tasks,
            ...req.transactions,
            ...req.news,
            req.privBudgetBehavioral,
            req.bankBehavioral,
            req.connectionBehavioral,
            req.taskBehavioral,
            req.compareUniBehavioral,
            ...req.parentReqs,
            ...req.alerts


        ].filter(item => item != null)
        res.status(200).json({
            status: 'success',
            feed
        })

    } catch (e) {
        res.status(401).json({
            status: 'failed',
            message:e.message
        })
    }
}

但 req.parentReqs 在 getFeed 函数中不起作用。getFeed 中的 console.log 给了我“未定义”,而 ParentReqsToConnectController.checkParentReqs 中的 req.parentReqs 未定义。似乎不能通过中间件传输

提前感谢您的帮助

标签: javascriptnode.jsexpressmiddleware

解决方案


推荐阅读