gpt4 book ai didi

node.js - pug.compile() 找不到模板文件(res.render() 可以)

转载 作者:太空宇宙 更新时间:2023-11-04 03:24:08 25 4
gpt4 key购买 nike

我正在编写一个小型 NodeJS/Express 应用程序。我将哈巴狗设置为其模板引擎:

const app = express();

app.set('view engine', 'pug');
app.set('views', __dirname + "/public/views");
app.use(express.static(__dirname + '/public/static'));

调用 res.render() 发送 HTML 响应时效果很好:

app.get('/', function getIndex(req, res){
res.render('index.pug');
});

但是当我尝试渲染小组件并将它们收集在字符串或数组中作为对 AJAX 调用的响应时,我无法让它工作。

const pug = require('pug');
const compile = pug.compileFile('option.pug');

这总是会导致错误:ENOENT:没有这样的文件或目录,打开“option.pug”。我尝试更改路由器视角的路径(例如 ../../public/views/option.pug),但这也没有帮助。

我不知道为什么路径的解释不同。

使用pug.compileFile时如何引用此模板?

最佳答案

从Pug源代码中,传递的路径被设置为选项中的文件名:

https://github.com/pugjs/pug/blob/926f7c720112cac76cfedb003e25e9f43d3a1767/packages/pug/lib/index.js#L354

然后将其传递给 handleTemplateCache 以读取文件:

https://github.com/pugjs/pug/blob/926f7c720112cac76cfedb003e25e9f43d3a1767/packages/pug/lib/index.js#L215

因此最终路径只是传递给 fs.readFileSync,它将相对路径视为相对于当前工作目录 process.cwd()

您可以使用如下方式生成适当的路径:

const file = app.get('views') + '/option.pug';

最好使用 path.join 而不是字符串连接来构建路径,https://nodejs.org/api/path.html#path_path_join_paths

const path = require('path');
const file = path.join(app.get('views'), 'option.pug');

如果您不想(或不能)使用 app.get('views'),您可以通过其他方式构建绝对路径,例如直接使用 __dirname

另请注意,您可以将回调传递给 res.render ,该回调将传递渲染的 HTML,而不是将其写入响应。这可能会让您避免首先直接调用模板。

关于node.js - pug.compile() 找不到模板文件(res.render() 可以),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46830099/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com