【发布时间】:2015-06-05 06:26:53
【问题描述】:
使用 node.js 0.12.35 和 Express 4.x。 目前我需要访问不同的位置来查看我的视图。所以 Express 4.x 的 API 文档说 app.set 方法的 views 属性将采用“应用程序视图的目录或目录数组。如果是数组,则按照它们出现的顺序查找视图阵列。” 那么请你给我一个如何定义这样一个数组的例子吗?到目前为止,我尝试的所有内容都出现在此错误消息中。 我为我的 app.set 使用了以下样式
app.set('views', ['/my/path/components/views/' + 'base', '/my/path/components/views/' + 'starters']);
但它不起作用。我收到一条错误消息:
TypeError: **Arguments to path.join must be strings**
at path.js:360:15
那么我错过了什么?如何将数组添加到 app.set? 实际上我已经尝试过自己调试它并查看了 express 的 view.js 脚本。从那里我可以看到该数组已正确传递给该脚本,我可以看到两个不同的根路径,但是从那里它没有正确构造不同的完整路径,在我的情况下是 .jade 文件,因为我使用了玉引擎.这意味着带有根路径的下一个 path.join 和文件本身不起作用并引发错误。深入挖掘,看起来 path.join 无法获取数组?但是多视图路径应该如何工作呢?我想,Express 4.x 应该能够使用多个视图,但是如果开箱即用的 views.js 不能处理这样的数组怎么办?我迷路了……
【问题讨论】:
-
你写“我用了下面的样式”。但是,那是您正在使用的 exact 代码吗?将多个视图目录作为数组传递对我来说很好 (example)。
-
感谢您的示例。你是对的,如果一切都在 node.js 脚本启动的目录中,它就可以工作。但我需要从该目录的外部启动它。因此,如果我的 app.js 位于 /my/path/components/application 中,我希望有目录 /my/path/components/base 和 /my/path/components/starters 用于视图。当我尝试这样做时,我失败了。
-
这对我来说也很好用(例如 /tmp 中的 app.js,查看 /var/tmp 中的目录)。在我看来,您正在以编程方式构建路径字符串,也许会因此而失败?
-
好吧,现在我真的很困惑。不幸的是,我清理了我的系统,因为有了你的提示,我想我现在知道该怎么做了。但是现在您的测试代码在我的环境中也不起作用。所以我认为这与 node.js 和 express 的版本有关。所以 node.js 我正在运行 0.12.4 并表示 4.12.4 (当您的代码之前工作时,我升级到了这个版本)。所以此刻我完全迷失了。
-
好吧,看来我现在明白了。好像是版本问题。在 npm install 之后,它就可以工作了。