我正在http
内撰写node.js
服务器。
Server
对象有几个字段应根据请求发送给客户端。这就是我需要将status()
传递给router.route()
的原因 - 因此可以从内部调用(在解析请求之后)并返回更新变量值。问题是,当调用status()
时,它不会打印字段值,而是打印对象文字。
构造函数Server
如下:
this.server = net.createServer(connectionHandler);
this.resourceMap = resourceMap;
this.rootFolder = rootFolder;
this.isStarted = false;
this.startedDate = undefined;
this.port = undefined;
this.numOfCurrentRequests = 0;
function status() {
return {
"isStarted" : this.isStarted,
"startedDate" : this.startedDate,
"port" : this.port,
"resourceMap" : this.resourceMap,
};
}
function connectionHandler(socket) {
console.log('server connected');
console.log('CONNECTED: ' + socket.remoteAddress +':'+ socket.remotePort);
socket.setEncoding('utf8');
socket.on('data',function(data) {
this.numOfCurrentRequests += 1;
router.route(status,data,socket,handle,resourceMap,rootFolder);
});
}
this.startServer = function(port) {
this.port = port;
this.isStarted = true;
this.startedDate = new Date().toString();
this.server.listen(port, function() {
console.log('Server bound');
});
}
}
当从router.route()
内部调用状态时,我得到了
function status() {
return {
"isStarted" : this.isStarted,
"startedDate" : this.startedDate,
"port" : this.port,
"resourceMap" : this.resourceMap,
};
}
我理解它的方式函数是变量,因此通过值传递。我可以用任何方式解决我的问题吗?
谢谢
答案 0 :(得分:0)
如果我已经清楚地联系到你,你不需要一个函数指针,但它是结果。所以status
应该如下传递:
router.route(status(),data,socket,handle,resourceMap,rootFolder);
最终将传递以下对象:
return {
"isStarted" : this.isStarted,
"startedDate" : this.startedDate,
"port" : this.port,
"resourceMap" : this.resourceMap,
}
如果要显示它们,请在回调中使用以下代码
for(var s in status) {
console.log(s+" : "+status[s]);
}
答案 1 :(得分:0)
对于像我这样在谷歌搜索中实际意味着“功能指针”的人,这里有一个答案:
承认我们在app.js文件中需要一个外部文件:
var _commandLineInterface("./lib/CommandLine")();
var _httpServer = require("./lib/HttpServer")(_commandLineInterface);
然后,在我们的HttpServer.js文件中,承认我们要使用作为_httpServer构造函数的参数传递的_commandLineInterface对象。我们会这样做:
function HttpServer(_cli){
console.log(_cli);
}
module.exports = HttpServer;
BZZZZZZZZT!错误。 _cli指针似乎未定义。结束了。一切都失去了。
好的......这就是诀窍:还记得我们的CommandLine对象吗?
function CommandLine(){
...
return this;
}
module.exports = CommandLine;
是的。当你不习惯nodejs行为时,这很奇怪。
你必须对你的物体说,它必须在施工后自行返回。对于习惯于前端Javascript行为的人来说,这是不正常的。
所以,当你添加一点点“返回技巧”时,你将能够从你的另一个对象中获取你的指针:
function HttpServer(_cli){
console.log(_cli); // show -> {Object}
}
希望它能帮助像我这样的节点新手。