在Node.js + Express中request.cookies ['name']和request.cookies.name有什么区别

时间:2013-01-24 10:10:34

标签: node.js cookies express

考虑我在我的Node.js应用程序中保存一个cookie,我正在使用快速框架的cookieParser中间件。

app.use(express.cookieParser());

app.get('/setCookie', function(req, res){
   res.cookie('String_cookieName', 'String_value', { expires: new Date(Date.now() + 18000000), httpOnly: true }); // +5 Hours expiry
});

在阅读它们的同时,我遇到了两个选择:

  1. request.cookies['String_cookieName']
  2. request.cookies.name
  3. 两者都会返回string_value,我为我的Cookie设置'String_cookieName'),否则将返回undefined

    但我的问题是哪一个在性能方面更快/更有效?

3 个答案:

答案 0 :(得分:3)

Request.cookies只是一个对象。您可以使用您编写的任一方法访问对象的任何成员。 object.xxx通常在您已经知道要访问的字段的名称时使用,其中通常在字段名称为动态时使用括号;例如:

var variable = "foo";
object[variable] = "bar";

variable = "test";
object[variable] = "qwax"

console.log(object.foo); //"bar"
console.log(object.test); //"qwax"

据我所知,两者都没有明显快,所以如果你正在访问一个静态字段,你可以互换使用它们。

答案 1 :(得分:1)

表现实际上是相同的,see jsperf.

许多Cookie示例使用方括号并将属性作为字符串,因为通常使用点符号无法直接访问这些字符。

示例:

cookies['connect.sid']  // OK
cookies.connect.sid     // error

答案 2 :(得分:0)

没有区别。只是JavaScript有两种访问对象字段的方法。

在我看来,最好使用像request.cookies.name之类的普通表示法,然后使用request.cookies ['name'],除非你循环遍历一个对象的许多字段并为每个字段应用相同的操作。

//lets say you have object like one below: var someObj = {};
someObj.x1 = 1; 
someObj.x2 = 2; 
someObj.x3 = 3; 
someObj.x4 = 4;
someObj.x5 = 5; 
... 
someObj.x20 = 20;

//And if you want to output properties 3 to 12 
//you can do like that
for(var i = 3; i<12; ++i)
{
   console.log(someObj['x' + i]); 
}

其他只是使用普通符号,这样你就可以让代码更加易读,并且开发人员会更容易理解