设置 restify 默认 JSON 响应
Setting restify default JSON response
我正在尝试使用写入 restify 响应的 readStream 来传输文件内容。但是我无法设置全局响应 Content-Type header
这是我的代码的样子
let restify = require('restify');
let router = require('./routes');
let server = restify.createServer({
formatters: null,
log: null,
spdy: null,
version: '0.0.1',
handleUpgrades: false
});
server.listen(8080, function() {
console.log('%s listening at %s', server.name, server.url);
});
//I think this is suppose to set the response header across the app but it is not
restify.defaultResponseHeaders = function(data) {
this.header('Content-Type', 'application/json');
};
server.use(restify.acceptParser(server.acceptable));
server.use(restify.authorizationParser());
server.use(restify.CORS());
server.use(restify.dateParser());
server.use(restify.queryParser());
server.use(restify.gzipResponse());
server.use(restify.bodyParser());
server.use(restify.requestLogger());
//server.use(restify.throttle());
server.use(restify.conditionalRequest());
server.use(restify.fullResponse());
server.use(restify.bodyParser());
//router
router(server);
我的路线动作是这样的
let fs = require('fs');
module.exports = function ecmaRoutes(server) {
let PATH = '/sample/';
server.get(function sampleV1(req, resp) {
let path = 'sample.json';
let rStream = fs.createReadStream(path);
rStream.pipe(resp);
});
};
无论出于何种原因,我的回复都没有将 content-type 设置为 application/json
。我可以使用
在路由操作中手动完成
resp.header('Content-type', 'application/json');
但如果我必须为每条路线都这样做,那会很麻烦。
我的路由操作是否存在根本性错误?
您不需要为每条路线都这样做。只需在 listen
函数之后添加:
尝试这样的事情:
server.use(function(req,res,next){
res.setHeader('content-type','application/json')
// OR
res.setHeaders({'content-type'}:'application/json'})
next()
})
我正在尝试使用写入 restify 响应的 readStream 来传输文件内容。但是我无法设置全局响应 Content-Type header
这是我的代码的样子
let restify = require('restify');
let router = require('./routes');
let server = restify.createServer({
formatters: null,
log: null,
spdy: null,
version: '0.0.1',
handleUpgrades: false
});
server.listen(8080, function() {
console.log('%s listening at %s', server.name, server.url);
});
//I think this is suppose to set the response header across the app but it is not
restify.defaultResponseHeaders = function(data) {
this.header('Content-Type', 'application/json');
};
server.use(restify.acceptParser(server.acceptable));
server.use(restify.authorizationParser());
server.use(restify.CORS());
server.use(restify.dateParser());
server.use(restify.queryParser());
server.use(restify.gzipResponse());
server.use(restify.bodyParser());
server.use(restify.requestLogger());
//server.use(restify.throttle());
server.use(restify.conditionalRequest());
server.use(restify.fullResponse());
server.use(restify.bodyParser());
//router
router(server);
我的路线动作是这样的
let fs = require('fs');
module.exports = function ecmaRoutes(server) {
let PATH = '/sample/';
server.get(function sampleV1(req, resp) {
let path = 'sample.json';
let rStream = fs.createReadStream(path);
rStream.pipe(resp);
});
};
无论出于何种原因,我的回复都没有将 content-type 设置为 application/json
。我可以使用
resp.header('Content-type', 'application/json');
但如果我必须为每条路线都这样做,那会很麻烦。
我的路由操作是否存在根本性错误?
您不需要为每条路线都这样做。只需在 listen
函数之后添加:
尝试这样的事情:
server.use(function(req,res,next){
res.setHeader('content-type','application/json')
// OR
res.setHeaders({'content-type'}:'application/json'})
next()
})