我可以在哈希表中存储响应对象吗?

时间:2015-05-26 21:34:59

标签: javascript node.js

我已经开始编写节点应用程序了,我想将requestresponse个对象存储在哈希表中。对于我使用jshashtable的哈希表。当我将requestresponse个对象存储在哈希表中并稍后提取时,我在尝试使用Object.keys called on non-object时出现response错误,无论是{{1}或者只是用writeHead()打印。但是console.log()会为typeof返回object,因此当response存储在response时,jshashtable会被操纵。在jshashtable网站上,作者写道“'对象'在这里被宽松地用来表示任何JavaScript对象或值。”,所以看起来我应该能够存储任何javascript对象,包括response对象

jshashtable可以与npm install jshashtable一起安装。

以下是一些可以复制问题的代码。

var Hashtable = require('jshashtable');
var crypto = require('crypto');
var table = new Hashtable();
var http = require('http');
var fs = require("fs");

var home = fs.readFileSync('/some/random/html/home.html');

http.createServer(function(req, res) {  
   crypto.randomBytes(8, function(ex, buf) {
   if (ex) throw ex;
     var userID = buf.toString('hex');

     var state = {
       "req": req,
       "res": res
     }

     table.put(userID, state);

     var message = {
       "httpCode": 200,
       "humanCode": "OK",
       "contentType": "text/html",
       "data": home
     };

     dataOut(userID, message, function(err, rtrn) {

     });
   });
}).listen(80);

function dataOut(userID, message, callback) {
    if(typeof callback === 'function') {

      var state;

      state = table.get(userID);
      if(state === null) {
        console.log("Can't get value");
        callback("Can't get value from key.", null);
      }

      if(typeof state.res === 'object') {
        console.log('This is an object');
      }

      //console.log(state.res);

      state.res.writeHead(message.httpCode, message.humanCode, message.contentType);
      state.res.write(message.data);
      state.res.end();
    }
  }

那么为什么我不能在request中存储它们后使用responsejshashtable

1 个答案:

答案 0 :(得分:4)

我遇到的唯一错误是在第51行的state.res.writeHead...上。评论出来,工作正常,我可以使用响应对象。 res.writeHead的错误是您传递参数的方式。它应该是res.writeHead(status, {header_Name: header_value, another_header: another_value})