我正在使用express在节点中处理REST API。我使用以下内容获取帐户列表(暂时阅读文件中的回复)
app.get('/accounts/list', function(req, res){
var filename = basepath
+ 'accounts-list.xml';
var cb = function(input){send_successful_response(res, input);};
var cb_err = function(input){send_error_response(res, input);};
response_for_file(filename, cb, cb_err);
});
使用:
function response_for_file(filename, cb_success, cb_error){
fs.readFile(filename, 'utf8', function(error, data){
if (!error) return cb_success(data)
else return cb_error(error)
});
}
和:
function send_successful_response(res, content){
res.set('Content-Type', 'text/xml')
.status(200)
.send(content);
}
当我在Chrome中调用此路线时,一切看起来都不错。但是,当我从REST控制台调用它时,它似乎仍然活着。我想知道是否有任何要求表明应该终止响应,或者这是否是预期的行为。
答案 0 :(得分:0)
您是否曾尝试在end()
上致电res
?
此外,最好从文件createReadStream()和pipe()
到res
。
答案 1 :(得分:0)
我最终意识到问题在于节点集的访问控制限制。添加以下内容解决了问题:
app.all('*', function(req, res, next){
if (!req.get('Origin')) return next();
res.set('Access-Control-Allow-Origin', '*');
res.set('Access-Control-Allow-Methods', 'GET, POST');
res.set('Access-Control-Allow-Headers', 'X-Requested-With, Content-Type');
res.set('Access-Control-Allow-Max-Age', -1);
if ('OPTIONS' == req.method) return res.send(200);
next();
});