首页 > 解决方案 > 无法读取未定义的 node.js 文件系统的属性“toString”

问题描述

我这里有这个脚本,在加载页面时,它应该首先加载一个标题 html 样板,一些动态段落,并以页脚 html 样板结束请求。两个样板都来自外部文件。

测试后,我收到:

TypeError:无法在 FSReqWrap.readFileAfterOpen [as oncomplete] (fs.js:367:13) 的 ReadFileContext.callback (/user_code/index.js:20:23) 处读取未定义的属性“toString”

我的理解是我需要.toString()来确保从外部文件加载的内容被缓冲为字符串。

exports.request = functions.https.onRequest((req, res) => {

        fs.readFile('/public/templates/header-template.html', function(_err, data) {
            res.write(data.toString());
            console.log('Header Loaded');
        });

        res.writeHead(200, {'Content-Type': 'text/html'});
        var q = url.parse(req.url, true).query;
        var txt = '<p>Thanks <b>' + q.firstname + ' ' + q.lastname + '</b>. An email has been sent to <b>' + q.email + '</b> with details about your request.';
        res.write(txt);

        fs.readFile('/public/templates/footer-template.html', function(_err, data) {
            res.end(data.toString());
            console.log('Footer Loaded');
        });

    });

知道我做错了什么吗?

标签: node.jsstringhttpfs

解决方案


您应该将编码传递toString()给从缓冲区转换。

data.toString('utf8');

此外,您的变量似乎data未定义,因此您的文件可能不存在。捕获错误并查看问题所在:

if(_err){
   console.error(_err);
}

推荐阅读