在另一个文件中导出/使用快速会话

时间:2018-12-16 04:10:33

标签: node.js express session

在其他文件中使用快速会话的最佳/常见方法是什么?我无法将会话集成到我的代码中。我正在使用身份验证令牌,但我想改用会话。 我在server.js中定义了会话:

const express = require('express');
var session = require('express-session');
var cookieParser = require('cookie-parser');

var app = express();
app.use(cookieParser('secret'));
app.use(session({
    key: 'user_sid',
    secret: 'secret',
    resave: false,
    saveUninitialized: false,
    cookie: {
        expires: 600000
    }
}));

// stuff

module.exports = {app, session};

工作正常!但是当我尝试在自己的userController.js中使用它时:

var express = require('express');
var {session} = require('./../server');

module.exports.login = (req, res) => {
  var body = _.pick(req.body, ['email', 'password']);
  User.findByEmailAndPassword(body.email, body.password).then((user) => {
    // console.log(req.session); // is undefined
    res.render('dashboard.hbs');
  }).catch((e) => {
    res.status(400).send();
  });
}

然后req.sessionundefined。 很明显,我知道我在做什么,但是正确的方法是什么?

谢谢!

1 个答案:

答案 0 :(得分:0)

我认为您根本不需要导出session,因为您告诉appserver.js中使用它。

因此,工作中的小提琴应如下所示:

const express = require('express');
var session = require('express-session');
var cookieParser = require('cookie-parser');

var app = express();
app.use(cookieParser('secret'));
app.use(session({
  key: 'user_sid',
  secret: 'secret',
  resave: false,
  saveUninitialized: false,
  cookie: {
    expires: 600000
  }
}));

// stuff

module.exports = app;

和您的控制器:

module.exports.login = (req, res) => {
  var body = _.pick(req.body, ['email', 'password']);
  User.findByEmailAndPassword(body.email, body.password).then((user) => {
    // console.log(req.session); // is undefined
    res.render('dashboard.hbs');
  }).catch((e) => {
    res.status(400).send();
  });
}

我正在考虑您要将此导出的登录功能用于一条路线,例如

app.use('/login', require('yourCtrl.js').login);