Я пытаюсь запустить страницу index.html с nodejs, но по какой-то причине я продолжаю получать ошибку приложения после того, как я нажимаю ее на 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);
});
При использовании fs.readFileSync()
без указания каких-либо options
возвращаемое значение уже будет Buffer
, поэтому вам не нужно создавать другое.
Buffer.isBuffer(fs.readFileSync('index.html')); // true
typeof fs.readFileSync('index.html', 'utf8') === 'string'; // true
И, res.send()
может обрабатывать res.send()
Buffer
. Так или иначе, он фактически преобразует String
в Buffer
.
var fs = require('fs');
response.send(fs.readFileSync('index.html'));
Вы также можете установить Content-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');
buffer.toString('utc-8',...
- typo, должен быть utf-8
. Но подумайте, что Jonathans все равно ответит.