простой сервер-автономный базовый пример нет маршрутов в списке или доступны - PullRequest
0 голосов
/ 02 ноября 2019

Я следую этому базовому примеру (https://medium.com/hackernoon/tdd-means-zen-along-with-serverless-means-nirvana-a39a76ee8e63) для установки без сервера в автономном режиме для модульного тестирования проекта без сервера.

К сожалению, я не могу получить первоначальный запуск без сервера в автономном режиме дляработают правильно. После запуска «автономного запуска без сервера», вывод консоли не отображает метод GET, а запрос к localhost: 3000 возвращает только «Cannot GET /".

Есть идеи, что мне здесь не хватает? Заранее спасибо.

Мой serverless.yml:


provider:
  name: aws
  runtime: nodejs10.x
functions:
  hello:
    handler: handler.hello
    events:
      - http:
        path: ''
        method: get
plugins:
  - serverless-offline
  - serverless-mocha-plugin

Мой пакет.json:

  "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"
  }
}

Мой обработчик.js:


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

Выход на консоль:

$ 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

1 Ответ

1 голос
/ 02 ноября 2019

Оказывается, это была проблема с отступом в моем serverless.yml. В блоге-примере не задан путь, метод или cors после -http. Спасибо https://stackoverflow.com/a/58226113/296047 за указание в правильном направлении.

Примечание, после перезагрузки компьютера и пробного использования этого блога с нуля, я также получил сообщение об ошибке:

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

Надеюсь, это поможет кому-то еще, кто также проходит через день устранения неполадок, которые я только что прошел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...