渲染EJS模板时出现错误,提示this.templateText.replace不是一个函数。

14

我正在尝试从文件中呈现EJS模板,但是出现了错误this.templateText.replace is not a function

const http = require('http');
const fs = require('fs');
const ejs = require('ejs');

const server = http.createServer(function(req, res){
    fs.readFile('index.ejs', function(err, data) {
        if (err) {
            res.end("Error");
        }

        res.end(ejs.render(data, { title: "Hello" }));
    });
});

server.listen(4000);
1个回答

24

事实证明,在回调函数data中,fs.readFile返回原始缓冲区,而ejs.redner期望一个字符串。

如果未指定编码,则返回原始缓冲区。

如果您想从fs.readFile获取字符串,则需要将编码作为第二个参数传递:

fs.readFile('index.ejs', 'utf-8', function(err, data) {
    // now data is a string
});

5
或者使用 ejs.renderFile(filename, data); - Slawa
1
较新的节点版本使用options参数进行编码。fs.readFile('index.ejs', {encoding: "utf-8"}, (err, data)=>{ }); - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接