首页 > 解决方案 > 在 req.user 中传递数据 javascript-express

问题描述

我有一个简单的快递服务器:

var express = require('express');
var app = express();
var port =  process.env.PORT || 3000;

var consentRoutes = require('./src/routes/consentRoutes.js');
app.use('/consents', (req, res, next) => {
    req.user="Eleftheria"
    next();
  }
 ,consentRoutes);

app.listen(port, ()=>{
    console.log(`Server is running on port ${port}`)
})

文件:consentRoutes.js

const express = require('express');
const router = express.Router();

const consentControllers = require('../controllers/consentControllers')

//Creates an account access consent : /consents
router.post('/', consentControllers.createConsent);

module.exports = router;

然后控制器文件名为:consentControllers.js

const request = require("request");

//Creates an account access consent: /consents
exports.createConsent = async (req, res, next) => {
  console.log("user's name is:" );   
  console.log(req.user);
  next();
};

我的问题是 req.user 永远不会被打印,有什么问题?我想要做的是,在文件中传递数据:consentControllers.js 并能够在那里使用和访问它们。我真的很陌生,我仍在试图弄清楚一切是如何运作的。任何帮助表示赞赏!

标签: javascriptnode.jsexpress

解决方案


Express.js 在中间件订单调用中附加数据。您在req.user许可路由中间件执行之后分配。正确的是:

app.use(
  "/consents",
  (req, res, next) => {
    req.user = "Eleftheria";
    next();
  },
  consentRoutes
);

现在,您首先附加user到,然后将用户分配的 req 变量req传递给下一个中间件。consentRoutes

值得一提的是,直接为 req 分配属性并不是一个好习惯。你应该使用res.locals


推荐阅读