1

Node.js では、Jade をテンプレート レンダラーとして使用している場合、res.render 呼び出しで可能な唯一の出力は HTML です。

Content-Type: text/htmlただし、対応するヘッダーは自動的に含まれません。

これは設計によるものですか?もしそうなら、このヘッダーをすべてのルートに追加せずにこれを実装する簡単な方法はありますか?

4

3 に答える 3

7

それは翡翠の使い方次第です。jade はレンダリングを行うだけで、レンダリングされたコンテンツの適切なヘッダーを認識していません。

res.setHeader('Content-Type', 'text/html'); //or text/plain
res.render('yourtemplate');

最も適したヘッダーを選択する必要があります。

于 2013-10-17T03:52:45.863 に答える
1

Content-Type: text/htmlすべての get リクエストを強制するデモ アプリを作成しました。次に、そのヘッダーを設定する機能を無効にしようとしましたが、そのヘッダーがまだ応答に表示されているため、デフォルトで設定されているようです。

Content-Type が設定されていませんか? Express のバージョンとヘッダーの表示方法を教えてください。Express 3.4.1 と Chromium を使用しています

// app.js
var express = require('express');
var app = express();

function setHTML(req, res, next){
  res.header('Content-Type', 'text/html');
  next();
};

app.set('views', __dirname);
app.set('view engine', 'jade');
app.use(app.router);

//app.get('*', setHTML);
app.get('/', function(req, res){
  res.render('template');
});

require('http')
.createServer(app)
.listen(3000, function(){
  console.log('Listening on 3000');  
})

// template.jade
!!!
html
  body
    h1 hello thar

//response headers
HTTP/1.1 200 OK
X-Powered-By: Express
Content-Type: text/html; charset=utf-8
Content-Length: 60
Date: Thu, 17 Oct 2013 03:50:46 GMT
Connection: keep-alive
于 2013-10-17T03:56:33.697 に答える
0

you can override res.render method

app.use(function(req, res, next){

    var oldRender = res.render;
    res.render = function(){
        res.header('Content-Type', 'text/html');
        oldRender.apply(this, arguments);
    };

    next();
});

Do this just after creating your app.

于 2013-10-17T03:48:25.023 に答える