javascript - 如何在 Node.js 中使用 php 的 session_id() 之类的东西?

标签 javascript node.js express

我使用这个代码:

/*
 * 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");
});

在路由中,我似乎可以通过 req.sessionID 获得类似 php 的 session_id() 的内容。但在

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() 一样工作吗?

最佳答案

开箱即用的 Express 没有 sessionID 变量。您需要使用类似 https://github.com/expressjs/session 的中间件这将为您提供req.sessionID。请参阅https://github.com/expressjs/session#reqsessionid-1了解更多详情。

关于javascript - 如何在 Node.js 中使用 php 的 session_id() 之类的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39303566/

相关文章:

node.js - 多个nodejs应用程序之间的进程间通信

node.js - Strongloop Loopback中如何定义一个模型有多个相同的模型?

javascript - 使用外键将 mysql 数据打印到 EJS 文档

node.js - express 包中的app.get方法

javascript - 使用 mongoose 查询 mongodb 集合中的正则表达式

node.js - Express Multer 在上传前验证字段

javascript - 无法从 jQuery 元素获取文本

javascript - JS 函数的回调

javascript - Backbone : Listening for button clicks on seperate view

javascript - 如何从 Javascript 中的文件名字符串中提取扩展名?