我有一个基于NodeJS / Express和AngularJS的应用程序,它通过REST API与应用服务器通信。如果应用程序服务器没有运行,我想立即向AngularJS客户端返回一个错误,即调用失败。
以下是我目前的情况:
var jsonObject = JSON.stringify(input);
var postHeaders = {
'Content-Type': 'application/json',
'Content-Length': Buffer.byteLength(jsonObject, 'utf8')
};
var options = {
host: '127.0.0.1',
port: 7777,
path: path,
method: method,
headers: postHeaders
};
var appServerRequest = http.request(options, function(appServerResult) {
console.log('STATUS: ' + appServerResult.statusCode);
console.log('HEADERS: ' + JSON.stringify(appServerResult.headers));
appServerResult.setEncoding('utf8');
var responseDataString = '';
appServerResult.on('data', function(chunk) {
responseDataString += chunk;
console.log('BODY: ' + chunk);
});
appServerResult.on('end', function() {
callback(responseDataString);
});
appServerResult.on('error', function(e) {
console.log('** Result ERROR in appServerResponse');
console.log(e);
});
});
appServerRequest.on('response', function(response) {
console.log('Response: ' + response);
});
appServerRequest.on('error', function(e) {
console.log('** Request ERROR in appServerRequest');
console.log(e);
});
appServerRequest.write(jsonObject);
appServerRequest.end();
正如您所看到的,我正在聆听错误'请求和响应对象上的事件。进行调用且应用程序服务器未运行时,将按预期调用Request错误处理程序。但是,我还没有能够弄清楚如何处理该错误并将其返回给客户端。最终返回响应对象,但仅在超时到期后才返回。似乎应该有一种方法可以在检测到错误时立即返回响应并指定适当的HTTP状态代码。如果我有一个响应对象(当然),我可以做到,但是在超时到期之前我不会得到它。
我知道我必须遗漏一些简单的东西,但我无法弄清楚它是什么。