首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无服务器-离线基本示例没有列出或可用的路由

无服务器-离线基本示例没有列出或可用的路由
EN

Stack Overflow用户
提问于 2019-11-02 15:10:28
回答 1查看 2.5K关注 0票数 0

我遵循这个基本示例(https://medium.com/hackernoon/tdd-means-zen-along-with-serverless-means-nirvana-a39a76ee8e63)来设置无服务器--离线以对无服务器项目进行单元测试。

不幸的是,我不能让无服务器的初始运行-脱机正常工作。运行"serverless offline start“后,控制台输出不显示GET方法,并且对localhost:3000的请求仅返回"Cannot GET /”。

你知道我这里漏掉了什么吗?提前谢谢。

我的serverless.yml:

代码语言:javascript
复制
provider:
  name: aws
  runtime: nodejs10.x
functions:
  hello:
    handler: handler.hello
    events:
      - http:
        path: ''
        method: get
plugins:
  - serverless-offline
  - serverless-mocha-plugin

我的package.json:

代码语言:javascript
复制
  "name": "my-api",
  "version": "1.0.0",
  "description": "",
  "main": "handler.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "mongodb": "^3.3.3"
  },
  "devDependencies": {
    "serverless-mocha-plugin": "^1.11.0",
    "serverless-offline": "^5.12.0"
  }
}

我的handler.js:

代码语言:javascript
复制
module.exports.hello = async event => {
  return {
    statusCode: 200,
    body: JSON.stringify(
      {
        message: 'Go Serverless v1.0! Your function executed successfully!',
        input: event
      },
      null,
      2
    )
  };
};

控制台输出:

代码语言:javascript
复制
$ sls offline start
Serverless: Load command interactiveCli
Serverless: Load command config
Serverless: Load command config:credentials
Serverless: Load command config:tabcompletion
Serverless: Load command config:tabcompletion:install
Serverless: Load command config:tabcompletion:uninstall
Serverless: Load command create
Serverless: Load command install
Serverless: Load command package
Serverless: Load command deploy
Serverless: Load command deploy:function
Serverless: Load command deploy:list
Serverless: Load command deploy:list:functions
Serverless: Load command invoke
Serverless: Load command invoke
Serverless: Load command invoke:local
Serverless: Load command info
Serverless: Load command logs
Serverless: Load command metrics
Serverless: Load command print
Serverless: Load command remove
Serverless: Load command rollback
Serverless: Load command rollback:function
Serverless: Load command slstats
Serverless: Load command plugin
Serverless: Load command plugin
Serverless: Load command plugin:install
Serverless: Load command plugin
Serverless: Load command plugin:uninstall
Serverless: Load command plugin
Serverless: Load command plugin:list
Serverless: Load command plugin
Serverless: Load command plugin:search
Serverless: Load command config
Serverless: Load command config:credentials
Serverless: Load command rollback
Serverless: Load command rollback:function
Serverless: Load command offline
Serverless: Load command offline:start
Serverless: Load command create
Serverless: Load command create:test
Serverless: Load command create:function
Serverless: Load command invoke
Serverless: Load command invoke:test
Serverless: Load command login
Serverless: Load command logout
Serverless: Load command generate-event
Serverless: Load command test
Serverless: Load command dashboard
Serverless: Invoke offline:start
Serverless: Starting Offline: dev/us-east-1.
[offline] options: { apiKey: 'XXXXXXXXXXXXXXXXXX',
  cacheInvalidationRegex: /node_modules/,
  corsAllowOrigin: [ '*' ],
  corsAllowCredentials: true,
  corsAllowHeaders: [ 'accept', 'content-type', 'x-api-key', 'authorization' ],
  corsExposedHeaders: [ 'WWW-Authenticate', 'Server-Authorization' ],
`  
  disableCookieValidation: false,
  enforceSecureCookies: false,
  exec: '',
  hideStackTraces: false,
  host: 'localhost',
  httpsProtocol: '',
  location: '.',
  noAuth: false,
  noEnvironment: false,
  noTimeout: false,

  port: 3000,
  prefix: '/',
  preserveTrailingSlash: false,
  printOutput: false,
  providedRuntime: '',
  showDuration: false,
  stage: 'dev',
  region: 'us-east-1',
  resourceRoutes: false,
  skipCacheInvalidation: false,
  useSeparateProcesses: false,
  websocketPort: 3001,
  corsConfig:
   { credentials: true,
     exposedHeaders: [ 'WWW-Authenticate', 'Server-Authorization' ],
     headers: [ 'accept', 'content-type', 'x-api-key', 'authorization' ],
     origin: [ '*' ] } }
[offline] funOptions {
  "funName": "hello",
  "funTimeout": 30000,
  "handlerName": "hello",
  "handlerPath": "/Users/rocky/Documents/Projects/garmin/sls-troubleshooting/my-api/ha
ndler",
  "runtime": "nodejs10.x"
}

[offline] hello runtime nodejs10.x
Serverless: Routes for hello:
[offline] Response Content-Type  application/json
Serverless: POST /{apiVersion}/functions/my-api-dev-hello/invocations

Serverless: Offline [HTTP] listening on http://localhost:3000
Serverless: Enter "rp" to replay the last request
EN

回答 1

Stack Overflow用户

发布于 2019-11-02 15:46:51

事实证明,这是我的serverless.yml中的缩进问题。示例博客没有在-http后面缩进路径、方法或cors。感谢https://stackoverflow.com/a/58226113/296047为我指明了正确的方向。

附注,在重新启动我的计算机并从头开始尝试这个博客示例后,我也收到了错误消息:

代码语言:javascript
复制
{"statusCode":404,"error":"Serverless-offline: route not found.","currentRoute":"get - /","existingRoutes":["post - /{apiVersion}/functions/my-api-prod-hello/invocations"]}

希望这对正在经历我刚刚经历的一天的故障排除的其他人有所帮助。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58668987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档