【发布时间】:2015-01-09 06:17:15
【问题描述】:
我已经使用 Express 和 MongoDB 在 Node.js 中编写了我的第一个 web 应用程序。作为基础,我使用了this example。
在本地测试服务器时一切都运行顺利,并且最初在服务器上运行时也是如此(这是我通过 SSH 连接并使用PM2 在断开连接后保持进程运行的 Ubuntu 服务器)。我遇到的问题是,当与服务器断开连接时,起初像魅力一样工作的网页会在我脸上抛出错误(请参阅下面的错误消息)。
Error: Failed to lookup view "index"
at Function.app.render (/home/ubuntuserver/appname/node_modules/express/lib/application.js:489:17)
at ServerResponse.res.render (/home/ubuntuserver/appname/node_modules/express/lib/response.js:755:7)
at exports.index (/home/ubuntuserver/appname/routes/basic.js:4:7)
at callbacks (/home/ubuntuserver/appname/node_modules/express/lib/router/index.js:161:37)
at param (/home/ubuntuserver/appname/node_modules/express/lib/router/index.js:135:11)
at pass (/home/ubuntuserver/appname/node_modules/express/lib/router/index.js:142:5)
at Router._dispatch (/home/ubuntuserver/appname/node_modules/express/lib/router/index.js:170:5)
at Object.router (/home/ubuntuserver/appname/node_modules/express/lib/router/index.js:33:10)
at Context.next (/home/ubuntuserver/appname/node_modules/express/node_modules/connect/lib/proto.js:190:15)
at Context.actions.pass (/home/ubuntuserver/appname/node_modules/passport/lib/passport/context/http/actions.js:77:8)
at SessionStrategy.authenticate (/home/ubuntuserver/appname/node_modules/passport/lib/passport/strategies/session.js:67:10)
at attempt (/home/ubuntuserver/appname/node_modules/passport/lib/passport/middleware/authenticate.js:243:16)
at Passport.authenticate (/home/ubuntuserver/appname/node_modules/passport/lib/passport/middleware/authenticate.js:244:7)
at next (/home/ubuntuserver/appname/node_modules/express/node_modules/connect/lib/proto.js:190:15)
at Passport.initialize (/home/ubuntuserver/appname/node_modules/passport/lib/passport/middleware/initialize.js:69:5)
at next (/home/ubuntuserver/appname/node_modules/express/node_modules/connect/lib/proto.js:190:15)
at next (/home/ubuntuserver/appname/node_modules/express/node_modules/connect/lib/middleware/session.js:313:9)
at /home/ubuntuserver/appname/node_modules/express/node_modules/connect/lib/middleware/session.js:330:9
at /home/ubuntuserver/appname/node_modules/express/node_modules/connect/lib/middleware/session/memory.js:55:7
at process._tickCallback (node.js:415:13)
节点进程似乎一直在运行,但是在断开 SSH 连接时出现问题。通过 SSH 重新连接时,一切都直接开始照常工作。
有什么想法吗?
编辑: 通过意识到 PM2 的集群模式不适用于 Passport 中使用的会话,我设法减少了一些错误。我现在使用 -x 启动 PM2,并在断开 SSH 并尝试重新加载页面时在浏览器中收到以下错误:
Error: Failed to lookup view "index"
at Function.app.render (/home/ubuntuserver/appname/node_modules/express/lib/application.js:489:17)
at ServerResponse.res.render (/home/ubuntuserver/appname/node_modules/express/lib/response.js:755:7)
at exports.index (/home/ubuntuserver/appname/routes/basic.js:4:7)
at callbacks (/home/ubuntuserver/appname/node_modules/express/lib/router/index.js:161:37)
at param (/home/ubuntuserver/appname/node_modules/express/lib/router/index.js:135:11)
at pass (/home/ubuntuserver/appname/node_modules/express/lib/router/index.js:142:5)
at Router._dispatch (/home/ubuntuserver/appname/node_modules/express/lib/router/index.js:170:5)
at Object.router (/home/ubuntuserver/appname/node_modules/express/lib/router/index.js:33:10)
at Context.next (/home/ubuntuserver/appname/node_modules/express/node_modules/connect/lib/proto.js:190:15)
at Context.actions.pass (/home/ubuntuserver/appname/node_modules/passport/lib/passport/context/http/actions.js:77:8)
【问题讨论】:
-
请发布此文件中的代码:
/home/ubuntuserver/appname/routes/basic.js:4:7。这是结合了您的快速设置app.set('views', thisPathIsVeryImportant)的基本文件系统布局。因此,我们需要查看您存储视图文件的文件系统结构以及您如何配置 express 以及您对res.render的调用。 -
好的。我的 basic.js 基本上只是
var mongoose = require('mongoose'); exports.index = function(req, res) { res.render('index', { user: req.user }); };我注意到 express 使用this.set('views', process.cwd() + '/views');在其 application.js 文件中设置视图文件夹的位置。当通过 SSH 和记录 process.cwd() 连接时,我得到:/home/ubuntuserver/,但在断开 SSH 连接时,我得到(unreachable)。我尝试从 process.cwd() 更改为实际位置,但同样的问题仍然存在。似乎没有使用 Express 的 application.js 中设置的“视图”。
标签: node.js express ssh passport.js