簡體   English   中英

在使用 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 顯示頁面之前進行一些驗證和查找。

索引.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 來證明我正在正確到達頁面。 您可以在下面的 output 中看到。 但是當我調用 router.all 時,它從未真正被擊中。 我已經嘗試過 router.use('/'...., router.get('/'..., router.post('/', ... 它們都不是每次都成功。

Lamda 日志中的 Output:

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); 
    }
}

這是 output

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

我想到了。 我在這樣一個簡單的錯誤上浪費了很多時間。 我需要將“返回”添加到 awsServerlessExpress.proxy 行。

return awsServerlessExpress.proxy(server, event, context,'PROMISE').promise;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM