在 restify js 上处理网络套接字响应
handling net socket response on restify js
我正在使用 restify 在 nodeJs 中编写一个中间件,但我无法处理来自服务器的异步响应:
在我的 index.js 中调用了以下代码:
app.get('/get-users', [getUsers]);
...
function getUsers(req, res) {
var query = {type:'get-users', parameters:{}, content:[]};
res.set('Content-Type', 'application/json');
var queryJson = JSON.stringify(query);
var message = queryJson+"\n";
res.send(client.writeToServer(message));
}
writeToServer 函数在一个名为 mySocket.js:
的单独文件中
var net = require('net');
var host = '127.0.0.1';
var port = 6011;
var response;
var client;
var Promise = require('promise');
client = net.connect(port, host);
client.setEncoding("utf8");
client.on('connect', function() {
console.log('Connected');
});
function getPromisedData(message) {
if( client.write(message))
return new Promise(function(resolve) {
console.log('calling client.once');
client.once('data', function(data) {
console.log('once.data logging: '+JSON.parse(data));
response = JSON.parse(data);
resolve(response); });
});
}
exports.writeToServer = function (message) {
console.log('\nwriteToServer');
getPromisedData(message).then(function(response) {
console.log('promise resolved with response: '+response);
return response;});
}
尝试过但没有用。这是输出:
Connected
writeToServer
calling client.once
once.data logging:
promise resolved with response:
我是不是漏掉了什么?
提前致谢,
摩根
我不是 promises 专家,但我可以在这里看到几个可能的问题。首先,您应该始终使用大括号括起 if 语句之后的所有内容。
function getPromisedData(message) {
if( client.write(message)) {
return new Promise(function(resolve) {
console.log('calling client.once');
client.once('data', function(data) {
console.log('once.data logging: '+JSON.parse(data));
response = JSON.parse(data);
resolve(response); });
});
}
}
其次,当您调用 res.send 时,它会立即写回请求者。您还没有等待 client.writeToServer 呼叫 return 任何事情。 writeToServer 也应该 return 一个承诺,这样你就可以做这样的事情:
client.writeToServer(message).then(function(server_reponse){
res.send(server_response);
next();
}
坦率地说,我会放弃承诺并使用回调,直到您很好地了解正在发生的事情。
我正在使用 restify 在 nodeJs 中编写一个中间件,但我无法处理来自服务器的异步响应:
在我的 index.js 中调用了以下代码:
app.get('/get-users', [getUsers]);
...
function getUsers(req, res) {
var query = {type:'get-users', parameters:{}, content:[]};
res.set('Content-Type', 'application/json');
var queryJson = JSON.stringify(query);
var message = queryJson+"\n";
res.send(client.writeToServer(message));
}
writeToServer 函数在一个名为 mySocket.js:
的单独文件中 var net = require('net');
var host = '127.0.0.1';
var port = 6011;
var response;
var client;
var Promise = require('promise');
client = net.connect(port, host);
client.setEncoding("utf8");
client.on('connect', function() {
console.log('Connected');
});
function getPromisedData(message) {
if( client.write(message))
return new Promise(function(resolve) {
console.log('calling client.once');
client.once('data', function(data) {
console.log('once.data logging: '+JSON.parse(data));
response = JSON.parse(data);
resolve(response); });
});
}
exports.writeToServer = function (message) {
console.log('\nwriteToServer');
getPromisedData(message).then(function(response) {
console.log('promise resolved with response: '+response);
return response;});
}
尝试过但没有用。这是输出:
Connected
writeToServer
calling client.once
once.data logging:
promise resolved with response:
我是不是漏掉了什么?
提前致谢, 摩根
我不是 promises 专家,但我可以在这里看到几个可能的问题。首先,您应该始终使用大括号括起 if 语句之后的所有内容。
function getPromisedData(message) {
if( client.write(message)) {
return new Promise(function(resolve) {
console.log('calling client.once');
client.once('data', function(data) {
console.log('once.data logging: '+JSON.parse(data));
response = JSON.parse(data);
resolve(response); });
});
}
}
其次,当您调用 res.send 时,它会立即写回请求者。您还没有等待 client.writeToServer 呼叫 return 任何事情。 writeToServer 也应该 return 一个承诺,这样你就可以做这样的事情:
client.writeToServer(message).then(function(server_reponse){
res.send(server_response);
next();
}
坦率地说,我会放弃承诺并使用回调,直到您很好地了解正在发生的事情。