AWS Lambda:Express res.render 始终发送 "internal server error"
AWS Lambda: Express res.render always sends "internal server error"
我的目标是将我现有的 Node-Express-Pug-Mongo 网站移植到 Amazon Web Services 上,但我 运行 在 Lambda 上呈现 Pug 文件时遇到错误。每当我尝试 运行 res.render
时,页面都会显示:{"message": "Internal server error"}
在 3000 毫秒超时后(从查看 CloudWatch 控制台)。
我试过在任何地方抛出 console.log
以获取有关导致错误的原因的更多信息,但无济于事。
res.send
适用于文本
res.sendFile
与我试图在函数中使用的 Pug 文件一起工作
res.render
接受回调输入,我试图用它来捕获错误,但控制台上不存在任何日志。
- 我尝试了多种输入 pug 文件的方法,如您所见,有五个不同的
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;
None 这些渲染函数有效。它总是在 3 秒和 returns {"message": "Internal server error"}
后超时。我已经尝试了我能想到的一切。这是快递问题吗?我必须做一些不同的事情来配置 Pug 吗?当我在本地 Node.js 服务器上使用完全相同的模块时,它完全按照预期工作。
经过大量挖掘,我发现了问题所在。
我的 Lambda 函数 ("server") 没有分配足够的内存。当我尝试加载 Pug 时,它会超载并崩溃。
默认值为 128MB,因此将其调高至 384MB 左右效果很好。
我的目标是将我现有的 Node-Express-Pug-Mongo 网站移植到 Amazon Web Services 上,但我 运行 在 Lambda 上呈现 Pug 文件时遇到错误。每当我尝试 运行 res.render
时,页面都会显示:{"message": "Internal server error"}
在 3000 毫秒超时后(从查看 CloudWatch 控制台)。
我试过在任何地方抛出 console.log
以获取有关导致错误的原因的更多信息,但无济于事。
res.send
适用于文本res.sendFile
与我试图在函数中使用的 Pug 文件一起工作res.render
接受回调输入,我试图用它来捕获错误,但控制台上不存在任何日志。- 我尝试了多种输入 pug 文件的方法,如您所见,有五个不同的
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;
None 这些渲染函数有效。它总是在 3 秒和 returns {"message": "Internal server error"}
后超时。我已经尝试了我能想到的一切。这是快递问题吗?我必须做一些不同的事情来配置 Pug 吗?当我在本地 Node.js 服务器上使用完全相同的模块时,它完全按照预期工作。
经过大量挖掘,我发现了问题所在。 我的 Lambda 函数 ("server") 没有分配足够的内存。当我尝试加载 Pug 时,它会超载并崩溃。 默认值为 128MB,因此将其调高至 384MB 左右效果很好。