在使用 Node 的 AWS Lambda 中,无法让 Express 与 aws-serverless-express 一起使用
In AWS Lambda using Node, can't get Express to work with aws-serverless-express
下面是我的示例代码,但它不起作用。无论我设置什么,我都无法让 Express 呈现我的 ejs 页面。
注意:我在 Lambda 前面有一个 API 网关。那只会让我想要的交通进入。命中我的 Lambda 的所有内容都应该呈现 express 页面。虽然不在我下面显示的代码中,但一旦工作,我将在使用 express 显示页面之前进行一些验证和查找。
index.js
"use strict";
const AWS = require('aws-sdk');
AWS.config.region = 'us-east-1';
const awsServerlessExpress = require('aws-serverless-express');
const app = require('./displayRouter.js');
const serverDisplay = awsServerlessExpress.createServer(app.router)
exports.handler = async (event, context, callback) =>{
try
{
console.log("testing");
app.setValues("setting values called correctly");
console.log("before awsserverless")
await awsServerlessExpress.proxy(serverDisplay, event, context);
console.log("after call to awsserverless");
}catch(e){
console.log("ALERT: 500 error " + e);
}
}
displayRouter.js
const express = require('express');
const path = require('path');
const router = express();
router.set('view engine', 'ejs');
const setValues = async (testValueIn) =>
{
console.log("setting Values IN ROUTER");
console.log("value sent i: " + testValueIn);
}
router.set('views', express.static(path.join(__dirname, 'views')));
router.all('/', (req, res) => {
console.log('inside function before diaplying page');
res.render("emailTestPage",{ });
});
module.exports = {router, setValues};
注意,我调用 setValues 来证明我正确到达了页面。您可以在下面的输出中看到这一点。但是当我调用 router.all 时,它从未真正被击中。我试过 router.use('/'...., router.get('/'..., router.post('/', ... None 其中是每一个命中。
Lamda 日志中的输出:
2022-03-12T17:41:41.567-05:00 2022-03-12T22:41:41.549Z ggea5c27-4955-42c0-baf9-501e3f071bc7 INFO testing
2022-03-12T17:41:41.568-05:00 2022-03-12T22:41:41.567Z ggea5c27-4955-42c0-baf9-501e3f071bc7 INFO setting VALUES IN ROUTER
2022-03-12T17:41:41.568-05:00 2022-03-12T22:41:41.568Z ggea5c27-4955-42c0-baf9-501e3f071bc7 INFO value sent i: setting values called correctly
2022-03-12T17:41:41.568-05:00 2022-03-12T22:41:41.568Z ggea5c27-4955-42c0-baf9-501e3f071bc7 INFO before awsserverless
2022-03-12T17:41:41.607-05:00 2022-03-12T22:41:41.570Z ggea5c27-4955-42c0-baf9-501e3f071bc7 INFO after call to awsserverless
2022-03-12T17:41:41.669-05:00 END RequestId: ggea5c27-4955-42c0-baf9-501e3f071bc7
2022-03-12T17:41:41.669-05:00 REPORT RequestId: ggea5c27-4955-42c0-baf9-501e3f071bc7 Duration: 160.20 ms Billed Duration: 161 ms Memory Size:
编辑********
我把它简化到一页。还是不行。
"use strict";
const AWS = require('aws-sdk');
AWS.config.region = 'us-east-1';
const express = require('express');
const app = express();
app.set('view engine', 'ejs');
const awsServerlessExpress = require('aws-serverless-express');
app.get("/", (req, res) => {
console.log('inside app');
res.render("testPage",{ });
});
exports.handler = async (event, context, callback) =>{
try
{
console.log("CREATING SERVER");
let server = awsServerlessExpress.createServer(app);
await awsServerlessExpress.proxy(server, event, context);
console.log("after call to awsserverless");
}catch(e){
console.log("ALERT: 500 error " + e);
}
}
这是输出
2022-03-14T13:29:02.142-04:00 2022-03-14T17:29:02.124Z ddde0b20-2700-470a-bcff-af81aec74f61 INFO CREATING SERVER
2022-03-14T13:29:02.223-04:00 2022-03-14T17:29:02.185Z ddde0b20-2700-470a-bcff-af81aec74f61 INFO after call to awsserverless
2022-03-14T13:29:02.286-04:00 END RequestId: ddde0b20-2700-470a-bcff-af81aec74f61
2022-03-14T13:29:02.286-04:00 REPORT RequestId: ddde0b20-2700-470a-bcff-af81aec74f61 Duration: 191.47 ms Billed Duration: 192 ms Memory Size
我明白了。我在这样一个简单的错误上浪费了很多时间。我需要将“return”添加到 awsServerlessExpress.proxy 行。
return awsServerlessExpress.proxy(server, event, context,'PROMISE').promise;
下面是我的示例代码,但它不起作用。无论我设置什么,我都无法让 Express 呈现我的 ejs 页面。
注意:我在 Lambda 前面有一个 API 网关。那只会让我想要的交通进入。命中我的 Lambda 的所有内容都应该呈现 express 页面。虽然不在我下面显示的代码中,但一旦工作,我将在使用 express 显示页面之前进行一些验证和查找。
index.js
"use strict";
const AWS = require('aws-sdk');
AWS.config.region = 'us-east-1';
const awsServerlessExpress = require('aws-serverless-express');
const app = require('./displayRouter.js');
const serverDisplay = awsServerlessExpress.createServer(app.router)
exports.handler = async (event, context, callback) =>{
try
{
console.log("testing");
app.setValues("setting values called correctly");
console.log("before awsserverless")
await awsServerlessExpress.proxy(serverDisplay, event, context);
console.log("after call to awsserverless");
}catch(e){
console.log("ALERT: 500 error " + e);
}
}
displayRouter.js
const express = require('express');
const path = require('path');
const router = express();
router.set('view engine', 'ejs');
const setValues = async (testValueIn) =>
{
console.log("setting Values IN ROUTER");
console.log("value sent i: " + testValueIn);
}
router.set('views', express.static(path.join(__dirname, 'views')));
router.all('/', (req, res) => {
console.log('inside function before diaplying page');
res.render("emailTestPage",{ });
});
module.exports = {router, setValues};
注意,我调用 setValues 来证明我正确到达了页面。您可以在下面的输出中看到这一点。但是当我调用 router.all 时,它从未真正被击中。我试过 router.use('/'...., router.get('/'..., router.post('/', ... None 其中是每一个命中。
Lamda 日志中的输出:
2022-03-12T17:41:41.567-05:00 2022-03-12T22:41:41.549Z ggea5c27-4955-42c0-baf9-501e3f071bc7 INFO testing
2022-03-12T17:41:41.568-05:00 2022-03-12T22:41:41.567Z ggea5c27-4955-42c0-baf9-501e3f071bc7 INFO setting VALUES IN ROUTER
2022-03-12T17:41:41.568-05:00 2022-03-12T22:41:41.568Z ggea5c27-4955-42c0-baf9-501e3f071bc7 INFO value sent i: setting values called correctly
2022-03-12T17:41:41.568-05:00 2022-03-12T22:41:41.568Z ggea5c27-4955-42c0-baf9-501e3f071bc7 INFO before awsserverless
2022-03-12T17:41:41.607-05:00 2022-03-12T22:41:41.570Z ggea5c27-4955-42c0-baf9-501e3f071bc7 INFO after call to awsserverless
2022-03-12T17:41:41.669-05:00 END RequestId: ggea5c27-4955-42c0-baf9-501e3f071bc7
2022-03-12T17:41:41.669-05:00 REPORT RequestId: ggea5c27-4955-42c0-baf9-501e3f071bc7 Duration: 160.20 ms Billed Duration: 161 ms Memory Size:
编辑******** 我把它简化到一页。还是不行。
"use strict";
const AWS = require('aws-sdk');
AWS.config.region = 'us-east-1';
const express = require('express');
const app = express();
app.set('view engine', 'ejs');
const awsServerlessExpress = require('aws-serverless-express');
app.get("/", (req, res) => {
console.log('inside app');
res.render("testPage",{ });
});
exports.handler = async (event, context, callback) =>{
try
{
console.log("CREATING SERVER");
let server = awsServerlessExpress.createServer(app);
await awsServerlessExpress.proxy(server, event, context);
console.log("after call to awsserverless");
}catch(e){
console.log("ALERT: 500 error " + e);
}
}
这是输出
2022-03-14T13:29:02.142-04:00 2022-03-14T17:29:02.124Z ddde0b20-2700-470a-bcff-af81aec74f61 INFO CREATING SERVER
2022-03-14T13:29:02.223-04:00 2022-03-14T17:29:02.185Z ddde0b20-2700-470a-bcff-af81aec74f61 INFO after call to awsserverless
2022-03-14T13:29:02.286-04:00 END RequestId: ddde0b20-2700-470a-bcff-af81aec74f61
2022-03-14T13:29:02.286-04:00 REPORT RequestId: ddde0b20-2700-470a-bcff-af81aec74f61 Duration: 191.47 ms Billed Duration: 192 ms Memory Size
我明白了。我在这样一个简单的错误上浪费了很多时间。我需要将“return”添加到 awsServerlessExpress.proxy 行。
return awsServerlessExpress.proxy(server, event, context,'PROMISE').promise;