如何在Node.js中使用类似php的session_id()?

我使用这个代码:

/* * dependencies * */ var datetime = require('node-datetime'), express = require('express'), http = require('http'), upload = require('jfum'); // configuration var dirs = require('./config').directors; // varibles var client = 'http://localhost'; // express setup var app = express(); // Add headers app.use(function(req, res, next) { res.setHeader('Access-Control-Allow-Origin', client); res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE'); res.setHeader('Access-Control-Allow-Headers', 'X-CSRF-Token,X-Requested-With,content-type'); res.setHeader('Access-Control-Allow-Credentials', true); next(); }); app.use('/upload', function(req, res, next) { var date = datetime.create(), patch = date.format('/Y/m/d/') + req.sessionID; upload.fileHandler({ tmpDir: dirs.temp, uploadDir: __dirname + dirs.location + patch, uploadUrl: dirs.location_url + patch, maxPostSize: 11000000000, // 11 GB minFileSize: 1, maxFileSize: 10000000000, // 10 GB acceptFileTypes: /\.(gif|jpe?g|png)$/i, accessControl: { allowOrigin: client, allowMethods: 'OPTIONS, HEAD, GET, POST, PUT, DELETE' } })(req, res, next); }); // bind event upload.on('end', function(fileInfo) { // insert file info console.log("files upload complete"); console.log(fileInfo); // var exec = require('child_process').exec; // var command; // // command = exec('ipconfig4', function(error, stdout, stderr) { // console.log('stdout: ' + stdout); // console.log('stderr: ' + stderr); // if (error !== null) { // console.log('exec error: ' + error); // } // }); }); upload.on('delete', function(fileName) { // remove file info console.log("files remove complete"); console.log(fileName); }); upload.on('error', function(e) { console.log(e.message); }); // Configuration app.configure(function() { app.set('port', process.env.PORT || 3001); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(express.cookieParser('token')); app.use(express.session({ secret: 'secret' })); app.use(express.favicon()); app.use(express.static(__dirname + '/public')); }); app.configure('development', function() { app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); app.set('view cache', false); }); app.configure('production', function() { app.use(express.errorHandler()); app.set('view cache', true); }); /* * routes * */ app.get('/', function(req, res) { res.send(req.sessionID); }); /* * start server * */ http.createServer(app).listen(app.get('port'), function() { console.log("Express server listening on port " + app.get('port')); console.log("access url /location/input"); }); 

在路线中,似乎我可以得到像php的session_id()与req.sessionID。 但在

 app.use('/upload', function(req, res, next) { var date = datetime.create(), patch = date.format('/Y/m/d/') + req.sessionID; }); 

我从req.sessionID得到undefined 。 为什么? 这是否像php的session_id()

快捷方式没有sessionIDvariables。 你需要使用像https://github.com/expressjs/session这样的中间件,它会提供你req.sessionID 。 有关更多详细信息,请参阅https://github.com/expressjs/session#reqsessionid-1

节点Web服务器开发在中间件中起作用。 你需要做的是find合适的会话中间件,然后在你调用req.sessionID()之前把它input到你的中间件堆栈中。