我遵循这个基本示例(https://medium.com/hackernoon/tdd-means-zen-along-with-serverless-means-nirvana-a39a76ee8e63)来设置无服务器--离线以对无服务器项目进行单元测试。
不幸的是,我不能让无服务器的初始运行-脱机正常工作。运行"serverless offline start“后,控制台输出不显示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我的package.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"
}
}我的handler.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发布于 2019-11-02 15:46:51
事实证明,这是我的serverless.yml中的缩进问题。示例博客没有在-http后面缩进路径、方法或cors。感谢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"]}希望这对正在经历我刚刚经历的一天的故障排除的其他人有所帮助。
https://stackoverflow.com/questions/58668987
复制相似问题