express.js app.use(function理解问题

首先,我想说,无论语言如何,我都是初学者,其次,我尝试所有的javascript + node.js和所有的框架/模块,因为每个星期都有熊熊。

到目前为止,我已经能够在StackOverflow的帮助下find并解决所有的问题,但是这一次,我被卡住了,真的不知道为什么; 可能是一些不合理的理由或更深层的东西。

我想为网站做一些基本的function,现在我正在处理一个简单的authentication代码,所以我想保存一些客户端数据到会话variables; 我已经看到了一些例子,你会首先检查会话variables是否被定义,如果没有,这样做。

这里的例子代码:

.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(); }) 

但没有什么,variables保持不确定。

它在我做的另一个testing代码上工作,所以问题不是从这个部分真的,而是从我的其他代码更可能。

我什至不能做这个工作:

 .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或expression的部分(没有在这个代码上testingsocket.io)。

提前致谢..

将你的函数移动到上面的某处。 .use(app.router)

说明:

  • Express按照它们被添加到应用程序的顺序调用中间件( app.use函数),直到某些内容不会调用next()
  • app.router中间件检查匹配的url路由,然后使用该函数,否则调用next()

因此,只有在当前URL不匹配任何定义的路由时,才会调用任何定义在BELOW app.router中间件。 把静态文件放在app.router下面是app.router这样一个不好名字的文件不会占据一个合适的URL,但这不是你想要的行为。