0

我正在尝试使用 nodejs 启动 index.html 页面,但由于某种原因,在将其推送到 Heroku 后,我不断收到应用程序错误。知道我的代码有什么问题吗?

 #/!/usr/bin/env node

 var express = require('express');

 var app = express.createServer(express.logger());

 app.get('/', function(request, response) {
     var fs = require('fs');
     var buffer = new Buffer();
     response.send(buffer.toString('utc-8', fs.readFileSync("index.html")));
 });

 var port = process.env.PORT || 5000;
 app.listen(port, function() {
 console.log("Listening on " + port);
 });
4

2 回答 2

2

fs.readFileSync()不指定 anyoptions的情况下使用时,返回值已经是 a Buffer,因此您不必创建另一个。

Buffer.isBuffer(fs.readFileSync('index.html'));            // true
typeof fs.readFileSync('index.html', 'utf8') === 'string'; // true

并且,res.send()可以处理给定一个Buffer. 无论如何,它实际上会将Stringback 转换为 a 。Buffer

var fs = require('fs');
response.send(fs.readFileSync('index.html'));

您可能还想设置 aContent-Type以便浏览器知道它是 HTML:

var fs = require('fs');
response.setHeader('Content-Type', 'text/html');
response.send(fs.readFileSync('index.html'));

或者,您也可以使用 Express' res.sendfile(),它将为您管理这两个部分:

app.get('/', function (request, response) {
    response.sendfile('index.html');
});

但是,如果您收到提及的错误ENOENT,您可能需要附加路径。

fs路径将相对于当前工作目录,这可能不是您所期望的。

response.sendfile(__dirname + '/index.html');
于 2013-09-19T22:24:02.943 回答
1

buffer.toString('utc-8', ...– 错字,应该是utf-8。但无论如何都要考虑乔纳森的回答。

于 2013-09-19T22:41:32.163 回答