Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 节点中未定义req.session?_Javascript_Node.js_Session_Express_Session Cookies - Fatal编程技术网

Javascript 节点中未定义req.session?

Javascript 节点中未定义req.session?,javascript,node.js,session,express,session-cookies,Javascript,Node.js,Session,Express,Session Cookies,我已经看过了其他类似问题的答案,但没有一个对我有用。我编写了两段代码,一段用于测试cookies是否正常工作(cookieTest.js),另一段用于实际使用它们(users.js)。我尝试移动会话中间件和cookie中间件的app.use()语句,但没有成功。有没有办法解决这个问题 users.js //Mongoose Setup var mongoose = require('mongoose'); var Schema = mongoose.Schema; mongoose.connec

我已经看过了其他类似问题的答案,但没有一个对我有用。我编写了两段代码,一段用于测试cookies是否正常工作(cookieTest.js),另一段用于实际使用它们(users.js)。我尝试移动会话中间件和cookie中间件的app.use()语句,但没有成功。有没有办法解决这个问题

users.js

//Mongoose Setup
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
mongoose.connect("MY_DB");
var path = require('path');
var appDir = path.dirname(require.main.filename);
var bodyParser = require('body-parser')
var User = require('../models/user.js');
var passport = require('passport');
var LocalStrategy = require('passport-local');
var uuid = require('node-uuid');
var cookieParser = require('cookie-parser');
//Express Setup
var express = require('express');
var router = express.Router();
var app = express();
var expressValidator = require("express-validator");
var session = require('express-session');
app.use(bodyParser.urlencoded({ extended: false }));
app.use(expressValidator());
app.use(bodyParser.json());
app.use(cookieParser());
app.use(session({secret: '_secret_', cookie: { maxAge: 60 * 60 * 1000 }, saveUninitialized: false, resave: false}))
//Routes
router.get('/register', function(req, res){
  res.sendFile(appDir + "/views/register.html");
})
router.post('/register', function(req, res) {
  req.check('name', 'Name must be Filled in').notEmpty();
  req.check('email', 'Email must be Filled in').notEmpty();
  req.check('email', "Invalid Email").isEmail();
  req.check('password', 'Password Field must be Filled in').notEmpty();
  req.check('password', 'Passwords do not Match').equals(req.body.password2)
  var errors = req.validationErrors();
  if(errors) res.send(errors)
  else{
    var newUser = new User({
      name: req.body.name,
      email: req.body.email,
      password: req.body.password,
      info: req.body.user_bio
    });
    User.createUser(newUser, function(err, user){
            if(err) throw err;
    });
    res.redirect('../')
  }
})
router.get('/login', function(req, res){
  res.sendFile(appDir + "/views/login.html");
})
router.post('/login', function(req, res){
  var email = req.body.email;
  var candidatePass = req.body.password;
  User.findOne({ 'email': email }, 'password id', function (err, user) {
    if (err) return handleError(err);
    User.checkPassword(candidatePass, user.password, function(err, isMatch){
      if(err) throw err;
      if(!isMatch) res.end('Password Incorrect!');
      else{
        req.session.userId = user.id;
        res.redirect('../');
      }
    })
  })
})
//Exports
module.exports = router;
当我运行此命令时,我得到错误
TypeError:cannotsetproperty'userId'of undefined
,这意味着req.session未定义。然而,当我运行这个程序时,它运行得很好

var express = require('express');
var session = require('express-session');
var app = express();
var uuid = require('node-uuid');
var bodyParser = require('body-parser');

app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

// Use the session middleware
app.use(session({
  secret: 'jaredasch',
  cookie: { maxAge: 60 * 60 * 1000 },
  saveUninitialized: false,
  resave: false
}))

// Access the session as req.session
app.get('/', function(req, res, next) {
  var sess = req.session
  if (sess.uuid) {
    res.setHeader('Content-Type', 'text/html');
    res.write('<p>Session UUID: ' + sess.uuid + '</p>');
    res.write('<p>expires in: ' + (sess.cookie.maxAge / 1000) + 's</p>');
    res.write('<form method = \'POST\'action = \'/\'><button type = \'submit\'></form>');
    res.end()
  } else {
    sess.uuid = uuid.v4();
    res.setHeader('Content-Type', 'text/html');
    res.write('Set Up Session \n')
    res.write('<p>Session UUID: ' + sess.uuid + '</p>');
    res.end('<p>expires in: ' + (sess.cookie.maxAge / 1000) + 's</p>');
  }
})

app.post('/', function(req,res){
  req.session.destroy(function(err) {
    if(err) throw err;
    console.log('Session Destroyed')
  })
  res.redirect('/');
})

app.listen(3000, function(){
  console.log('Listening on Port 3000')
});
var express=require('express');
var会话=需要(“快速会话”);
var-app=express();
var uuid=require('node-uuid');
var bodyParser=require('body-parser');
use(bodyParser.urlencoded({extended:false}));
use(bodyParser.json());
//使用会话中间件
应用程序使用(会话)({
秘密:“jaredasch”,
cookie:{maxAge:60*60*1000},
saveUninitialized:false,
转存:错
}))
//以req.session的形式访问会话
app.get('/',函数(req,res,next){
var sess=req.session
如果(sess.uuid){
res.setHeader('Content-Type','text/html');
res.write(“会话UUID:”+sess.UUID+”

); res.write(“在:”+(sess.cookie.maxAge/1000)+“s

”)中过期; res.write(“”); 决议结束() }否则{ sess.uuid=uuid.v4(); res.setHeader('Content-Type','text/html'); res.write('设置会话\n') res.write(“会话UUID:”+sess.UUID+”

); res.end(“在以下时间到期:”+(sess.cookie.maxAge/1000)+“s

”; } }) app.post(“/”,函数(请求,res){ 请求会话销毁(功能(错误){ 如果(错误)抛出错误; console.log('会话已销毁') }) res.redirect('/'); }) app.listen(3000,函数(){ console.log('在端口3000上侦听') });
为什么这项工作和上面的一个不工作,我如何才能修复上面的一个?您建议如何解决此类问题?

尝试使用
app.use(cookieParser(“\u secret”)使其与Express相同的秘密

尝试使用
app.use(cookieParser(“\u secret”)
这样它的秘密就和Express一样了