首先,我想说的是,无论语言是什么,我都是初学者,其次,我正在尝试所有的javascript + node.js以及所有的框架/模块,因为它有一周的时间。
到目前为止,我能够在StackOverflow的帮助下找到并修复我的所有问题,但这一次,我陷入困境,真的无法弄清楚为什么;可能是一些noob原因或更深层次的东西。
我正在尝试为网站制作一些基本功能,现在我正在研究一个简单的身份验证代码,所以我想将一些客户端数据保存到会话变量中;我已经看到了一些例子,你首先要检查是否定义了会话变量,如果没有,那么这样做。
这里是示例代码:
.use(function(req, res, next){
if (typeof(req.session.todolist) == 'undefined') {
req.session.todolist = [];
}
next();
})
我想改为:
.use(function(req, res, next) {
if (typeof(req.session.auth) == 'undefined')
req.session.auth = false;
next();
})
但事实并非如此,变量保持未定义。
它处理了我制作的另一个测试代码,所以问题不是来自这部分,而是更可能来自我的其余代码。
我甚至无法做到这一点:
.use(function(req, res, next) {
console.log('test');
})
控制台中没有任何内容。
所以我想知道我的代码中的其他内容是否可能会干扰这个或不兼容,因为其他一切都运行良好:
// Setting up requirement
//----------------------------------
var path = require('path'),
express = require('express'),
app = express(),
server = require('http').createServer(app),
io = require('socket.io').listen(server),
ent = require('ent'),
mongoose = require('mongoose'),
crypto = require('crypto');
// Connection to the database
//----------------------------------
mongoose.connect('mongodb://localhost/alpha');
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function callback () {
db.db.collectionNames(function(error, names) {
if (error) {
throw new Error(error);
} else {
names.map(function(name) {
console.log(name);
});
}
});
});
// Setting up express for routing
//----------------------------------
app.set('port', 8080)
.set('views', path.join(__dirname, 'views'))
.set('view engine', 'jade')
.use(express.cookieParser())
.use(express.session({secret: 'xxxx'}))
.use(express.favicon())
.use(express.logger('dev'))
.use(express.bodyParser())
.use(express.methodOverride())
.use(app.router)
.use(express.static(path.join(__dirname, 'public')))
// Client variables
//----------------------------------
.use(function(req, res, next) {
console.log('test');
})
// Routing
//----------------------------------
// Index -- can be called via / or /index or /home
.get(/^\/(index|home)?$/, function(req, res) {
res.render('index', {title: 'Home'});
})
// Login
.post('/login', function(req, res) {
var login = req.body.login,
password = crypto.createHash('md5').update(req.body.password, 'utf8').digest('hex'),
loginT = 'aaa',
passwordT = crypto.createHash('md5').update('zzz', 'utf8').digest('hex');
if(password == passwordT)
res.send({error: false});
else
res.send({error: true});
})
// Starting up the server
//----------------------------------
server.listen(app.get('port'), function() {
console.log('Express server listening on port ' + app.get('port'));
});
我真的无法弄清楚这里的问题是什么,其余的代码再次完美无缺,无论是mongoose还是express部分(还没有测试socket.io还有这个代码)。
提前致谢..
答案 0 :(得分:1)
将您的功能移至.use(app.router)
以上的某个位置。
解释:
app.use
函数),直到某些内容无法调用next()
。app.router
中间件检查匹配的url路由,然后使用该功能,否则调用next()
。因此,只有当前网址与任何已定义的路由不匹配时,才会调用任何定义为app.router
的中间件。最好将静态文件放在app.router
下面,以便命名不佳的文件不会接管正确的URL,但这不是您正在寻找的行为。