передача данных в запросе пользователя javascript-express

#javascript #node.js #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 и иметь возможность использовать их там и получать к ним доступ. Я действительно новичок в самовыражении и все еще пытаюсь понять, как все работает. Любая помощь будет признательна!

Ответ №1:

Express.js добавляет данные в вызов заказа промежуточного программного обеспечения. Вы назначили req.user ПОСЛЕ выполнения промежуточного программного обеспечения consentRoutes. Правильным является:

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

Теперь вы сначала добавляете user req , а затем передаете следующему промежуточному consentRoutes программному обеспечению переменную req с назначенным пользователем.

Стоит сказать, что назначение свойств непосредственно для req не является хорошей практикой. Для этого вам следует использовать res.locals.

Комментарии:

1. Я загрузил код, как вы мне сказали ( см. отредактированную версию выше), но код все равно не работает

2.Я загрузил код, как вы мне сказали ( см. отредактированную версию выше), но код все равно не работает

3. Например, вы вызываете localhost:3000/соглашается с методом POST от почтальона?