Я недавно развернул свое самое первое приложение Node.js на AWS Elastic Beanstalk.Это очень простая страница портфолио.Сайт работал без проблем в течение нескольких часов, но затем экземпляр перешел в состояние «Серьезный», и страница вернула следующее сообщение:
502 Bad Gateway nginx / 1.12.1
Сообщение об ошибке вlog был «Первый аргумент должен быть строкой или буфером».
Я перезапустил сервер приложений, и страница работала без проблем в течение 12 часов, но затем снова отключилась с тем же сообщением.Поэтому я запустил средство устранения неполадок и попробовал следующее:
Версия Node.js в Elastic Beanstalk отличалась от версии, использованной для создания моего приложения, поэтому я изменил ее на ту же версию, с которой был создан сайт (8.12.0).Перезапущен сервер приложений.Та же проблема.
Я подумал, что, возможно, у балансировщика нагрузки возникли проблемы с чтением ответа, поэтому я начал преобразовывать данные, отправленные в ответе, в строку (.toString ()), но это не помогло.И оказывается, что в моей конфигурации даже нет балансировщика нагрузки.
В документации Node для fs.readFile сказано, что метод readFile использует много памяти и вместо этого стоит рассмотреть использование readStream, поэтому я внес это изменение, но я получаю тот же результат с readStream.
Я перестроил среду и попытался снова.На этот раз страница успешно работала в течение двух дней.Затем через два дня он снова допустил ошибку с этим сообщением:
Ошибка: ENOENT: нет такого файла или каталога, откройте «public // hell.php» events.js: 183 throw er;// Необработанное событие 'error' ^
Я не использую ЛЮБОЙ php-код.Почему он ссылается на php-файл под названием «ад»?
Вот мой код в файле server.js:
const http = require("http");
const fs = require("fs");
//use AWS's default port, or if it's not available, use port 8081.
const port = process.env.PORT || 8081;
const server = http.createServer(function (req, res) {
res.statusCode = 200;
if (req.url == "/" || req.url == "/index.html" || req.url == "/home") {
let readStream = fs.createReadStream("public/index.html");
// When the stream is done being read, end the response
readStream.on('close', () => {
res.end();
})
// Stream chunks to response
readStream.pipe(res);
}
else {
let readStream = fs.createReadStream("public/" + req.url);
// When the stream is done being read, end the response
readStream.on('close', () => {
res.end();
})
// Stream chunks to response
readStream.pipe(res);
}
}).listen(port);
Копия файла «public / index.html»читать fs можно по адресу: https://zurafuse.github.io/index.html
Кто-нибудь знает, что я делаю неправильно?