AWS Lambda: Express res.render всегда отправляет «внутреннюю ошибку сервера» - PullRequest
1 голос
/ 02 апреля 2019

Моя цель - перенести мой существующий веб-сайт Node-Express-Pug-Mongo на Amazon Web Services, но у меня возникает ошибка при рендеринге файлов Pug на Lambda. Всякий раз, когда я пытаюсь запустить res.render, на странице отображается следующее: {"message": "Internal server error"} после тайм-аута 3000 миллисекунд (из просмотра консоли CloudWatch).

Я пытался выбросить console.log везде, чтобы получить больше информации о причинах ошибки, но безрезультатно.

  • res.send работает с текстом
  • res.sendFile работает с файлом Pug, который я пытаюсь использовать в функции
  • res.render принимает входные данные обратного вызова, которые я пытался использовать для отлова ошибок, но на консоли нет журналов.
  • Я пробовал разные способы ввода файла мопса, как вы можете видеть для пяти разных get URL. Все они делают то же самое.
  • Я пытался перейти на Jade, но у меня те же проблемы.
  • ПРИМЕЧАНИЕ. На локальном сервере работают синтаксисы render1 и render3.
  • ТАКЖЕ: Использование локальных обратных вызовов на локальном сервере приводит к зависанию функции. Я попытался сделать это с обратным вызовом и без него, и проблема та же.
'use strict'
const path = require('path');
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
const router = express.Router();

app.set('view engine', 'pug');

router.use(bodyParser.json());
router.use(bodyParser.urlencoded({ extended: true }));
app.set('views', path.join(__dirname, 'views'));

router.get('/sendfile', function(req, res){
    res.sendFile(__dirname+"/views/test.pug");
});

router.get('/sendtext', function(req, res){
    res.send('hello!');
});

router.get('/render1', function(req, res){
    res.render('test', {}, function(err){
        console.log(err);
    });
});
router.get('/render2', function(req, res){
    res.render('.test', {}, function(err){
        console.log(err);
    });
});
router.get('/render3', function(req, res){
    res.render('./test', {}, function(err){
        console.log(err);
    });
});
router.get('/render4', function(req, res){
    res.render('./views/test', {}, function(err){
        console.log(err);
    });
});
router.get('/render5', function(req, res){
    res.render(__dirname+'/views/test', {}, function(err){
        console.log(err);
    });
});
app.use('/', router);

// Export your express server so you can import it in the lambda function.
module.exports = app;

Ни одна из этих функций рендеринга не работает. Он всегда истекает через 3 секунды и возвращает {"message": "Internal server error"}. Я перепробовал все, что мог придумать. Это экспресс проблема? Должен ли я сделать что-то другое, чтобы настроить Pug? Он работает точно так же, как и ожидалось, когда я использую точно такой же модуль на локальном сервере Node.js.

1 Ответ

1 голос
/ 07 апреля 2019

После долгих раскопок я разобрался в проблеме.Моей лямбда-функции («сервер») не было выделено достаточно оперативной памяти.Когда я пытался загрузить Pug, он перегружался и зависал.Значение по умолчанию - 128 МБ, поэтому повышение его до 384 МБ работало нормально.

...