1

私はノードを試しています.Expressボイラープレートのインストールを介したExpressフレームワークです。Redisをインストールする必要があることを理解するのにしばらく時間がかかりました(ところで、定型文を作成している場合は、必要なすべてのソフトウェアを含めるか、特定のソフトウェアの要件について警告します-Redisは必須として言及されたことはありません)。 server.js ファイルの周り。

今のところ、私はこれでサイトを構築する方法についてまだ見知らぬ人です..

特に私を悩ませている問題が 1 つあります。server.js ファイルを実行すると、すべて問題ないと表示されます。ブラウザでアクセスしようとすると、「localhost からデータを転送しています」と表示されて終了しません。render が送信を完了せず、ヘッダーを送信しないようです。エラーなし、ログなし、何もありません - res.render('index') がハングするだけです。ファイルは存在し、スクリプトはそれを見つけますが、何も起こりません。render にコールバックが定義されていないため、ヘッダーは通常どおり送信されます。一方、render コマンドを単純な write('Hello world'); に置き換えると、そして res.end(); を実行すると、魅力的に機能します。

レンダリングで何が間違っていますか? 元のインストールから何も変更していません。問題のファイルは index.ejs で、views/ にあり、app.register('.ejs', require('ejs')); も呼び出しました。念のため、レンダリング自体の前に。EJSがインストールされています。

また、注目に値する- res.render('index'); を実行した場合 そして res.write('Hello'); その直後に res.end(); を実行すると、画面に「Hello」が表示されますが、レンダリングは行われず、ハングして「localhost からデータを転送しています」と表示されます。したがって、アプリケーションが実際に停止したりハングしたりすることはなく、レンダリングが終了しないだけです。

編集: イベントの興味深いターン: レンダリングでコールバックを定義すると、応答は終了します。「データの転送中...」はもうありませんが、ビューはレンダリングされず、レイアウトもレンダリングされません。ソースは検査時に完全に空です。エラーはまったくなく、例外もありません。

4

1 に答える 1

0

問題が修正されました。これにより、render()はルーティングチェーンの絶対的な最後のコマンドである必要があります。res.write('Hello');を置く およびres.end(); それがまさにそれを壊したものだった後。

私はすべてを削除し、単にres.render('index')と書いたところ、それは魅力のように機能しました。私の失敗、初心者から学びましょう-レンダリング後に何も出力しません!

于 2011-09-22T08:21:23.907 に答える