运行 nodejs + expressjs 时访问 aws-lambda 上下文

Kon*_*iak 8 amazon-web-services node.js express aws-lambda

我刚开始使用 AWS-Lambda、AWS-API Gateway 和 ExpressJs。我在我的“ExpressJs”应用程序中找不到 AWS-Lambda“上下文”是如何可用的。

我正在使用:

  • AWS-Lambda
  • AWS-API 网关
  • NodeJs v4.3.2
  • ExpressJs 4.14.1
  • 克劳迪娅 2.7.0

在 Aws Lambda 中,我使用 aws-serverless-express 接收 API-Gateway 请求并初始化节点应用程序。以下是我从不同的教程等中找到的结构

lambda.js(从 API-Gateway 启动。在对“app.js”的调用中提供“context”变量)

'use strict'
const awsServerlessExpress = require('aws-serverless-express')
const app = require('./app')
const server = awsServerlessExpress.createServer(app)
exports.handler = (event, context) => awsServerlessExpress.proxy(server, event, context)
Run Code Online (Sandbox Code Playgroud)

我的 app.js express 的核心是:

var express = require('express');
...
var app = express();
...
app.use('/', index);
...
module.exports = app;
Run Code Online (Sandbox Code Playgroud)

我的问题:

  1. 有没有办法使用这种结构访问 AWS-Lambda “上下文”?
  2. 如果没有,使它可用的最佳“模式”是什么?

任何输入表示赞赏。

Mar*_*k B 12

您需要添加 aws-serverless-express 包中包含的中间件,该包公开eventcontext对象。你像这样添加它:

const awsServerlessExpressMiddleware = require('aws-serverless-express/middleware')
app.use(awsServerlessExpressMiddleware.eventContext())
Run Code Online (Sandbox Code Playgroud)

一旦配置了这个中间件eventcontext对象就会被添加到请求中。您可以像这样访问这些对象:

var event = req.apiGateway.event;
var context = req.apiGateway.context;
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,工作正常。对其他人的一些提示,尽管它们可能很明显: (1.) “app.use(awsServerlessExpressMiddleware.eventContext())”必须在任何“app.use('/', index);”之前完成。将使用 API-Gateway 上下文/事件 (2.) 此处提供的一般信息 https://github.com/awslabs/aws-serverless-express (3认同)