Amir
Amir

Reputation: 15

How can I use something like php's session_id() in Node.js?

I use this code :

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

In routes it seems I can get something like php's session_id() with req.sessionID. But in

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

I get undefined from req.sessionID. Why? Does this work like php's session_id()?

Upvotes: 1

Views: 465

Answers (2)

Gabriel Florit
Gabriel Florit

Reputation: 2918

Express out of the box does not have a sessionID variable. You need to use a middleware like https://github.com/expressjs/session which will provide you req.sessionID. See https://github.com/expressjs/session#reqsessionid-1 for more details.

Upvotes: 1

Subomi
Subomi

Reputation: 410

Node webserver development works in middlewares. What you need to do is find the appropriate session middleware, and input it to your middleware stack, before where you call req.sessionID().

Upvotes: 0

Related Questions