带WebSockets引用的Serverless脱机错误:未定义endpointUrl

2024-04-18 16:11:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试脱机使用Serverless,以便测试我的api,该api使用websocket支持+lambdas的api网关。但是,我似乎不能让它工作,在用SLS_DEBUG=*调试了几个小时之后,我就被错误[offline] Error in handler of action [object Object] ReferenceError: endpointUrl is not defined卡住了。在

这基本上就是我的无服务器.yml看起来像:

service: my-service

provider:
  name: aws
  runtime: python3.7
  stage: dev
  region: eu-west-1 
  profile: assumed-profile

plugins:
  - serverless-python-requirements
  - serverless-offline

custom:
  pythonRequirements:
    noDeploy:
      - typing
    dockerizePip: true
    dockerEnv:
      - http_proxy
      - https_proxy

package:
  individually: true

functions:
  websocket-connect:
    handler: connect.handler
    runtime: nodejs10.x
    events:
      - websocket:
          route: $connect
  websocket-disconnect:
    handler: disconnect.handler
    runtime: nodejs10.x
    events:
      - websocket:
          route: $disconnect
  hello-world:
    handler: hello_world.handler
    events:
      - websocket:
          route: hello-world

这基本上就是我的客户端.py看起来像:

^{2}$

我用sls offline start --printOutput离线启动serverless,并在另一个命令提示符下调用客户端.py。但是,当我查看来自serverless脱机提示符的调试输出时,我看到以下错误:

[offline] Error in handler of action [object Object] ReferenceError: endpointUrl is not defined
    at Object.exports.handler (C:\my-service\lambdas\nodejs\websocket_connect\index.js:24:28)
    at doAction (C:\my-service\node_modules\serverless-offline\src\ApiGatewayWebSocket.js:153:20)
    at Object.connect (C:\my-service\node_modules\serverless-offline\src\ApiGatewayWebSocket.js:203:15)
    at WebSocketServer.wss.on (C:\my-service\node_modules\hapi-plugin-websocket\hapi-plugin-websocket.js:209:34)
    at WebSocketServer.emit (events.js:198:13)
    at WebSocketServer.EventEmitter.emit (domain.js:448:20)
    at handleUpgrade (C:\my-service\node_modules\ws\lib\websocket-server.js:90:18)
    at WebSocketServer.completeUpgrade (C:\my-service\node_modules\ws\lib\websocket-server.js:321:5)
    at options.verifyClient (C:\my-service\node_modules\ws\lib\websocket-server.js:237:16)
    at Object.verifyClient (C:\my-service\node_modules\hapi-plugin-websocket\hapi-plugin-websocket.js:142:21)
    at WebSocketServer.handleUpgrade (C:\my-service\node_modules\ws\lib\websocket-server.js:232:22)
    at Server.upgrade (C:\my-service\node_modules\ws\lib\websocket-server.js:89:16)
    at Server.emit (events.js:198:13)
    at Server.EventEmitter.emit (domain.js:448:20)
    at onParserExecuteCommon (_http_server.js:553:14)
    at onParserExecute (_http_server.js:499:3)

我想我可能需要对serverless脱机发送给我的url(/{apiVersion}/functions/my-service-dev-hello-world/invocations)做些什么,但是我不确定是什么或者如何做——尤其是因为我想在AWS上为我的在线版本使用相同的代码。有人知道怎么解决这个问题吗?在


Tags: modulesnodeobjectservermyconnectservicejs