Node.JSでExpressを使用しているときにJadeを取り除くにはどうすればよいですか?プレーンHTMLを使用したいだけです。他の記事では、最新バージョンでは廃止されたapp.register()が推奨されていることを確認しました。
13 に答える
次の方法で実行できます。
ejs をインストールします。
npm install ejs
app.js でテンプレート エンジンを ejs として設定します。
// app.js app.engine('html', require('ejs').renderFile); app.set('view engine', 'html');
ルートファイルで、テンプレート変数を割り当てることができます
// ./routes/index.js exports.index = function(req, res){ res.render('index', { title: 'ejs' });};
次に、/views ディレクトリに HTML ビューを作成できます。
Jade は html 入力も受け入れます。
純粋な HTML の送信を開始するには、行末にドットを追加するだけです。
それで問題が解決する場合は、次を試してください。
doctype html
html. // THAT DOT
<body>
<div>Hello, yes this is dog</div>
</body>
PS - HTML を閉じる必要はありません - これは Jade によって自動的に行われます。
Express 3以降、簡単に使用できますresponse.sendFile
app.get('/', function (req, res) {
res.sendfile(__dirname + '/index.html');
});)
res.sendfile(path, [options], [fn]])
指定されたパスにファイルを転送します。
ファイル名の拡張子に基づいて、Content-Type 応答ヘッダー フィールドを自動的にデフォルト設定します。コールバック
fn(err)
は、転送が完了したとき、またはエラーが発生したときに呼び出されます。
警告
res.sendFile
http キャッシュ ヘッダーを介してクライアント側のキャッシュを提供しますが、サーバー側ではファイルの内容をキャッシュしません。上記のコードは、リクエストごとにディスクをヒットします。
私の意見では、html ファイルを読み取るためだけに ejs のような大規模なものを使用するのは、少し手間がかかります。私は、非常に単純な html ファイル用の独自のテンプレート エンジンを作成しました。ファイルは次のようになります。
var fs = require('fs');
module.exports = function(path, options, fn){
var cacheLocation = path + ':html';
if(typeof module.exports.cache[cacheLocation] === "string"){
return fn(null, module.exports.cache[cacheLocation]);
}
fs.readFile(path, 'utf8', function(err, data){
if(err) { return fn(err); }
return fn(null, module.exports.cache[cacheLocation] = data);
});
}
module.exports.cache = {};
私は私の htmlEngine を呼び出しました。それを使用する方法は、単に次のように言うだけです。
app.engine('html', require('./htmlEngine'));
app.set('view engine', 'html');
app.register()
app.engine()
Express 3がテンプレートエンジンの処理方法を変更したため、減価償却されていません。名前が変更されました。
Express 2.xテンプレートエンジンの互換性には、次のモジュールのエクスポートが必要でした。
exports.compile = function(templateString, options) { return a Function; };
Express 3.xテンプレートエンジンは、以下をエクスポートする必要があります。
exports.__express = function(filename, options, callback) { callback(err, string); };
テンプレートエンジンがこのメソッドを公開していない場合は、運が悪いわけではありません。このメソッドを
app.engine()
使用すると、任意の関数を拡張機能にマップできます。マークダウンライブラリがあり、.mdファイルをレンダリングしたいが、このライブラリがExpressをサポートしていなかった場合、app.engine()
呼び出しは次のようになります。var markdown = require('some-markdown-library'); var fs = require('fs'); app.engine('md', function(path, options, fn){ fs.readFile(path, 'utf8', function(err, str){ if (err) return fn(err); str = markdown.parse(str).toString(); fn(null, str); }); });
'plain' HTMLを使用できるテンプレートエンジンを探している場合は、非常に高速であるため、doTをお勧めします。
もちろん、Express 3ビューモデルでは、ビューのキャッシュはユーザー(またはテンプレートエンジン)に任されていることに注意してください。実稼働環境では、要求ごとにディスクI / Oを実行しないように、ビューをメモリにキャッシュすることをお勧めします。
レンダリング エンジンが jade の代わりに html を受け入れるようにするには、次の手順に従います。
consolidateとswigをディレクトリにインストールします。
npm install consolidate npm install swig
次の行を app.js ファイルに追加します
var cons = require('consolidate'); // view engine setup app.engine('html', cons.swig) app.set('views', path.join(__dirname, 'views')); app.set('view engine', ‘html');
ビュー テンプレートを「views」フォルダー内に .html として追加します。ノード サーバーを再起動し、ブラウザでアプリを起動します。
これで問題なく html がレンダリングされますが、JADE を学習して使用することをお勧めします。Jade は素晴らしいテンプレート エンジンであり、これを学習することで、より優れたデザインとスケーラビリティを達成することができます。
Jade は HTML をサポートしているので、.html ext だけが必要な場合は、これを行うことができます。
// app.js
app.engine('html', require('jade').renderFile);
app.set('view engine', 'html');
次に、ビュー内のファイルを jade から html に変更するだけです。
jade..などを使用せずに、nodeJSでプレーンhtmlを使用する場合:
var html = '<div>'
+ 'hello'
+ '</div>';
個人的にはそれでうまくいっています。
利点は、制御時の単純さです。'<p>' + (name || '') + '</p>'
、三項などのいくつかのトリックを使用できます
ブラウザでインデントされたコードが必要な場合は、次のことができます。
+ 'ok \
my friend \
sldkfjlsdkjf';
\t または \n を自由に使用します。しかし、私はなしの方が好きです。さらに、より高速です。