繁体   English   中英

Node.js表达请求保持有效

[英]Node.js express request staying alive

我正在使用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控制台调用它时,它似乎仍然存在。 我想知道是否有必要显示响应应该终止,或者这是否是预期的行为。

您是否尝试在res上调用end()

同样,最好从文件创建createReadStream()并将其pipe()传输到res

我最终意识到问题是节点集的访问控制限制。 添加以下内容解决了该问题:

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();
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM