我已经开始编写节点应用程序了,我想将request
和response
个对象存储在哈希表中。对于我使用jshashtable
的哈希表。当我将request
和response
个对象存储在哈希表中并稍后提取时,我在尝试使用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
中存储它们后使用response
和jshashtable
?
答案 0 :(得分:4)
我遇到的唯一错误是在第51行的state.res.writeHead...
上。评论出来,工作正常,我可以使用响应对象。 res.writeHead
的错误是您传递参数的方式。它应该是res.writeHead(status, {header_Name: header_value, another_header: another_value})