Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Node.js - writeHead to set both "Location" and "Set-Cookie"

Tags:

node.js

In node.js(running this in Connect.js), I am able to set ether the Location or Set-Cookie with writehead, but not both at the same time. Currently, the below sets the cooke but the URL does not get redirected to the new location:

function foo(req, res, next) {
    var url = /container-templates/;
    if (url.test(req.url)) {
        console.log(url.test(req.url));
        console.log(req.url);
        res.writeHead(302, ["Location", 'https://staging.dx.host.com' + req.url],
                ["Set-Cookie", "fake-token=5b49adaaf7687fa"]);
        res.end();
    } else { next() }
}

On a side note, I am doing this for the learning experience and do not want to use any pre-written plugins.

like image 797
dman Avatar asked Dec 07 '14 21:12

dman


1 Answers

Response#writeHead expects the headers to be an Object not a list of array arguments.

The Node HTTP documentation has the following signature defined:

response.writeHead(statusCode, [reasonPhrase], [headers])

If you want to pass in multiple headers your code from above should read:

response.writeHead(302, {
    Location: 'https://staging.dx.host.com' + req.url',
    'Set-Cookie': 'fake-token=5b49adaaf7687fa'
});

The [] on the reasonPhrase means its optional and infers what you've provided to the function based on the types of the arguments.

Also, you don't need to wrap the key part of an object in quotes unless it contains characters that are invalid for variable names (like the -.) And a single ' will do for all strings -- there is no difference in javascript between ' and ".

like image 120
tkone Avatar answered Nov 03 '22 00:11

tkone