У меня есть приложение, использующее Express, Node и Passport.Мне нужно добавить данные в мой пользовательский объект в промежуточном программном обеспечении.
В этом ответе предлагается использовать следующее решение:
app.use(function(req, res, next) {
if(req.user) req.user.whatever = 'you like';
next();
});
Однако для меня данныене сохраняется в объекте пользователя.
Мое промежуточное ПО:
app.use((req, res, next) => {
if (req.user) {
let location = req.body.location;
console.log("location : ", location); // "USA"
req.user.location = location;
console.log("req.user : ", req.user); // does NOT include "location" in user object
next();
}
else {
next();
}
});
Вызов console.log
по следующему пути также показывает, что клавиша location
не сохраняется.
Вот полный код моего server.js
файла.Может кто-нибудь помочь мне понять, почему данные не сохраняются?
const express = require('express');
const app = express();
const bodyparser = require("body-parser");
const passport = require("passport");
const session = require("express-session");
// http://expressjs.com/en/starter/static-files.html
app.use(express.static('public'));
// app.use(express.urlencoded({ extended: true }));
// app.use(express.json());
// bodyparser middleware
app.use(bodyparser.urlencoded({ extended: false }));
app.use(bodyparser.json());
// import passport-config file
require("./passport-config")(passport);
// express-session middleware
app.use(session({
secret: process.env.SECRET,
resave: false,
saveUninitialized: false
}));
// passport middleware
app.use(passport.initialize());
app.use(passport.session());
app.use((req, res, next) => {
if (req.user) {
let location = req.body.location;
console.log("location : ", location); // "USA"
req.user.location = location;
console.log("req.user : ", req.user); // does NOT include "location" in user object
next();
}
else {
next();
}
});
const routes = require('./routes.js');
routes(app);
// listen for requests :)
const listener = app.listen(process.env.PORT, () => {
console.log('Your app is listening on port ' + listener.address().port);
});