呈现静态 html 时出错

Posted

技术标签:

【中文标题】呈现静态 html 时出错【英文标题】:Error rendering static html 【发布时间】:2012-03-13 10:40:22 【问题描述】:

这段代码:

var app = require('express').createServer();
var ejs = require('ejs');
var fs = require('fs');
var indexTemplate = fs.readFileSync(__dirname + '/templates/index.html');

app.get('/', function(req, res)
    res.end(ejs.render(indexTemplate, ));
);

给我以下错误

类型错误:对象地址 没有方法“substr” 在 Object.parse (/home/lowerkey/node_modules/ejs/lib/ejs.js:152:20) 在 /home/lowerkey/node_modules/ejs/lib/ejs.js:192:13 在 Object.render (/home/lowerkey/node_modules/ejs/lib/ejs.js:235:10) 在/home/lowerkey/workspace/address book/server/server.js:60:14 在回调(/home/lowerkey/node_modules/express/lib/router/index.js:272:11) 在参数(/home/lowerkey/node_modules/express/lib/router/index.js:246:11) 通过(/home/lowerkey/node_modules/express/lib/router/index.js:253:5) 在 Router._dispatch (/home/lowerkey/node_modules/express/lib/router/index.js:280:4) 在 Object.handle (/home/lowerkey/node_modules/express/lib/router/index.js:45:10) 在下一个(/home/lowerkey/node_modules/express/node_modules/connect/lib/http.js:203:15)

我做错了什么?

【问题讨论】:

【参考方案1】:

由于 readFile 返回值的默认编码,您的 indexTemplate 变量实际上包含缓冲区而不是字符串。您可能想尝试在 readFileSync 第二个参数中添加 encoding 来设置它,如下所示:

...
var indexTemplate = fs.readFileSync(__dirname + '/templates/index.html', 'utf8');
...

【讨论】:

以上是关于呈现静态 html 时出错的主要内容,如果未能解决你的问题,请参考以下文章

使用 ResultSet 呈现数据时出错

重新呈现视图控制器时出错

如何防止尝试在已经呈现的控制器上呈现控制器时出错?

为啥我在 node.js 中使用 sendFile() 方法为两个路由提供静态文件时会出错

使用 express 和 axios 反应应用程序在呈现数据时出错

使用带有 HTML Webpack 插件的部分时出错