我有一个api,它通过管道在节点中读取可读流响应的方式返回文件。我还想在响应中返回tokenBody
的JSON内容,但是在构造流响应时我不知道要在哪里插入JSON。我在响应中得到文件就好了。记录请求时,我无法看到正确的JSON数据。它位于tokenBody
的本地变量中。有什么建议么?设置res.body = tokenBody
是我的想法,但会产生res.body is not a function
错误。
更新
我可以使用res.json(tokenBody);
返回JSON,但是node抛出cant set headers after they are sent
错误,并且不再仅在JSON中提供响应文件。好像我只能做另一件事。有办法做到这两者吗?
app.get('/:token', function(req, res, next) {
// first need to check whether user's allowed to have access to this token
checkAllowedManageTokens(req.apiUserId, 'read')
.then(function(constraints) {
var query = queryPushAndCondition({token: req.params.token}, constraints);
return tokenModel.findOne(query);
})
.then(function(obj){
if (isDefined(obj)) {
var tokenBody = objToJSON(obj);
// Retrieve the file and send it back to the user
var gfs = Grid(tokenDB.getConnection().db, tokenDB.getDriver());
var readStream = gfs.createReadStream({filename:obj.filename});
console.log("Token Body Response " + JSON.stringify(tokenBody));
// Set response headers
res.status(200);
if (isDefined(obj.mimeType)) res.contentType(obj.mimeType);
// Pipe the response data
readStream.pipe(res);
} else {
clientError(res, "Not found");
}
})
.catch(function(err){
console.error('Token GET error: '+err.message);
serverError(res, 'err.message');
});
});