另一个express.js请求.会话不存储数据
Another express.js req.session not storing data
我盯着同样的问题/答案看太久了。
我试图在请求中设置我的用户ID。会话变量
这是我的app.js堆栈
/**
* Module dependencies.
*/
var express = require('express')
, routes = require('./routes')
, cors = require('cors')
, mongoose = require('mongoose')
, User = require('./user-model')
, path = require('path')
, mysql = require('mysql');
app = express()
/**
* Middleware.
*/
app.use(cors());
app.use(express.bodyParser());
app.use(express.cookieParser());
app.use(express.session({ secret: 'supercalafragalistic' }));
app.locals.pretty = true;
app.use(express.static(path.join(__dirname, 'public')));
app.set('view engine', 'jade');
...
app.get('/someRoute', routes.someRoute)
我已经把app.router从上往下移动了。目前它是隐含的(我只是删除了它,因为我剥离了我的代码寻找错误)。我已经导出了应用程序,包括应用程序在路由(也擦除)。我添加了中间件。我迷路了.....
这是我的路由堆栈
//routes/index.js
//requires
var User = require('../user-model')
,qs = require('querystring')
,http = require('http')
,mysql = require('mysql')
,connection = mysql.createConnection({
edited
});
/**
* Set up application.
*/
connection.connect(function(err){
if(err) console.log('failed to connect to mysql because'+ err);
else console.log('connected to mysql');
})
我将id保存在登录路由中:
//login processing route
exports.logIn = function(req, res, next){
console.log('log in request from '+req.body.name);
User.findOne({name:req.body.name}, function(err, user, next){
if(err) return next(err);
if(!user) return res.end();
//check password
user.comparePassword(req.body.password, function(err, isMatch){
if(err) res.send('failed to find user');
console.log(""+isMatch);
if(isMatch){
console.log(user._id.toString()+' user loggd in');
//set session cookie
req.session.loggedIn = user._id.toString();
console.log('req.session.loggedIn set to :'+req.session.loggedIn );
res.send(user);
}else {
res.send('User not found try again');
}
});
});
但是,在所有其他路由中该变量是未定义的:
// clock status
exports.clockStatus = function(req, res, next){
var user = req.session.loggedIn;
console.log('Status route, userID: '+user);
if(user){
我在"无法访问请求"中找到了答案。在Express/NodeJS中的session变量",但最后一部分是:
在您的示例中,您已经分配了request .session.user = user;只有在/登录请求。它将不可用于进一步的请求(/auth)。
你也必须在/auth请求中通过会话id获取用户信息。(或者)最好使用护照进行认证。
如何?如何"通过会话id在/auth请求中获取用户信息"?
如果还有什么需要我澄清的,请问我。我难住了。我已经尝试过一些愚蠢的东西了!
如果你没有先在浏览器中登录,该变量在其他路由中是未定义的。下面是我的测试代码:
var express = require('express');
var cors = require('cors');
app = express();
app.use(cors());
app.use(express.bodyParser());
app.use(express.cookieParser());
app.use(express.session({ secret: 'this is a test' }));
app.use(express.static(require('path').join(__dirname, 'public')));
app.get('/login', function(req, res) {
req.session.uid = 'user001';
res.send(req.session);
});
app.get('*', function(req, res) {
res.send(req.session);
});
app.listen(8080);
首先在浏览器中访问http://localhost/login
。然后访问其他url(例如:, http://localhost/test
),则返回会话中的用户id。所以可能是你代码的其他部分出了问题。
- Ubuntu桌面13.10,64位
- 节点0.10.26
- NPM 1.4.4
- 表达3.4.8
- 歌珥2.2.0
相关文章:
- 如何在chrome扩展中存储数据/结果,以及如何使用setTimeout使其只被调用一次
- 如何以特定格式存储数据?在WYSWYG中
- web浏览器中的离线应用程序存储数据并在之后上传
- 在firebase(web)上存储数据时出现问题
- 使用会话Javascript存储数据
- 通过CK编辑器获取值和存储数据
- 存储数据的最佳方式是什么,以便与jquery一起使用
- 如何在网页之间存储数据
- jQuery 设置和获取下拉列表和输入的本地存储数据
- 如何通过HTML 5 javascript在本地ipad / iPhone上存储数据,并在设备上线时提交
- 使用 Cookie 存储数据
- 如何将本地存储数据提交到 Django
- 如何在循环jQuery中的数组中存储数据
- 正在从表行中删除本地存储数据
- 在web应用程序中存储数据
- 自动将jqgrid滚动到具有存储数据的单元格的当前日期列和闪烁效果
- 如何将复选框呈现为从本地存储数据中选中的复选框
- 如何使用Ajax检索和存储数据
- 方法存储数据,直到浏览器关闭
- 如何在redux sagas完成之前通过meta标签加载初始存储数据