1

我正在通过 Express 样板安装尝试 node 和它的 Express 框架。我花了一段时间才弄清楚我需要安装 Redis(顺便说一句,如果您正在制作样板文件,要么包含所有必需的软件,要么警告某些软件的要求 - Redis 从未按要求提及)并按照我的方式围绕 server.js 文件。

现在我仍然对如何在这个网站上建立一个陌生的..

有一个问题特别困扰我——当我运行 server.js 文件时,它说一切都很好。当我尝试在浏览器中访问它时,它显示“从本地主机传输数据”并且永远不会结束 - 就像渲染没有完成发送并且永远不会发送标头一样。没有错误,没有日志,什么都没有 - res.render('index') 只是挂起。该文件存在,脚本找到它,但什么也没发生。我在渲染中没有定义回调,所以标题应该像往常一样发送。另一方面,如果我将渲染命令替换为简单的 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 回答