20

restify のルートの 1 つに対して、json 応答の代わりにプレーンな html を送信したいと考えています。応答の contentType および header プロパティを設定しようとしましたが、ヘッダーに contentType が設定されていないようです (ブラウザはファイルをレンダリングするのではなくダウンロードしようとします)。

res.contentType = 'text/html';
res.header('Content-Type','text/html');
return res.send('<html><body>hello</body></html>');
4

4 に答える 4

28

サーバー全体のフォーマッターを変更せずにヘッダーを操作する簡単な方法:

復元応答オブジェクトには、ノード ServerResponse のすべての「生の」メソッドも含まれています。

var body = '<html><body>hello</body></html>';
res.writeHead(200, {
  'Content-Length': Buffer.byteLength(body),
  'Content-Type': 'text/html'
});
res.write(body);
res.end();
于 2013-03-30T20:04:51.260 に答える
12

restify 構成でフォーマッターを上書きした場合は、text/html のフォーマッターがあることを確認する必要があります。したがって、これは、応答オブジェクト (res) で指定された contentType に応じて、json および jsonp-style または html を送信する構成の例です。

var server = restify.createServer({
    formatters: {
        'application/json': function(req, res, body){
            if(req.params.callback){
                var callbackFunctionName = req.params.callback.replace(/[^A-Za-z0-9_\.]/g, '');
                return callbackFunctionName + "(" + JSON.stringify(body) + ");";
            } else {
                return JSON.stringify(body);
            }
        },
        'text/html': function(req, res, body){
            return body;
        }
    }
});
于 2012-06-21T00:08:05.270 に答える