【问题标题】:serverless framework with json parsing error带有 json 解析错误的无服务器框架
【发布时间】:2019-02-20 15:26:01
【问题描述】:

我使用带有 javascript 的无服务器框架。

我的代码是:

import { App } from '../lib/App';

export const hello = (event, context, cb) => {
context.callbackWaitsForEmptyEventLoop = false;

// This resolved promise would be be in the application library code in a real-world application and provide the results
App.handleFirst(event)  // eslint-disable-line promise/catch-or-return
.then(result => ({
statusCode: 200,
headers: {
  'Content-Type': 'application/json;charset=utf-8'
},
body: JSON.stringify(result)
}))
.asCallback(cb);

return;};

在 App.js 中

import BbPromise from  'bluebird';

const THE_MESSAGE = 'Hello from the webpack 4 sample';

export class App {
static handleFirst(event) {
const myDemoResult = {
  message: App.THE_MESSAGE,
  from: 'First lambda ',
  event
};
console.info(myDemoResult);
return BbPromise.resolve(myDemoResult);
}

我使用同胞命令来部署它。

set SLS_DEBUG=*
severless deploy

我的错误是:

Syntax Error -------------------------------------------

Unexpected token A in JSON at position 0

 For debugging logs, run again after setting the "SLS_DEBUG=*" environment variable.

Stack Trace --------------------------------------------

SyntaxError: Unexpected token A in JSON at position 0
SyntaxError: Unexpected token A in JSON at position 0
at JSON.parse (<anonymous>)
at BbPromise.try (F:\workspace\svlecma\node_modules\serverless-webpack\lib\packagers\npm.js:61:47)
at tryCatcher (F:\workspace\svlecma\node_modules\bluebird\js\release\util.js:16:23)
at Function.Promise.attempt.Promise.try (F:\workspace\svlecma\node_modules\bluebird\js\release\method.js:39:29)
at Utils.spawnProcess.catch.then.then.depJson (F:\workspace\svlecma\node_modules\serverless-webpack\lib\packagers\npm.js:61:35)
at tryCatcher (F:\workspace\svlecma\node_modules\bluebird\js\release\util.js:16:23)
at Promise._settlePromiseFromHandler (F:\workspace\svlecma\node_modules\bluebird\js\release\promise.js:512:31)
at Promise._settlePromise (F:\workspace\svlecma\node_modules\bluebird\js\release\promise.js:569:18)
at Promise._settlePromise0 (F:\workspace\svlecma\node_modules\bluebird\js\release\promise.js:614:10)
at Promise._settlePromises (F:\workspace\svlecma\node_modules\bluebird\js\release\promise.js:694:18)
at _drainQueueStep (F:\workspace\svlecma\node_modules\bluebird\js\release\async.js:138:12)
at _drainQueue (F:\workspace\svlecma\node_modules\bluebird\js\release\async.js:131:9)
at Async._drainQueues (F:\workspace\svlecma\node_modules\bluebird\js\release\async.js:147:5)
at Immediate.Async.drainQueues [as _onImmediate] (F:\workspace\svlecma\node_modules\bluebird\js\release\async.js:17:14)
From previous event:
at PluginManager.invoke (C:\Users\sheng\AppData\Roaming\npm\node_modules\serverless\lib\classes\PluginManager.js:390:22)
at PluginManager.spawn (C:\Users\sheng\AppData\Roaming\npm\node_modules\serverless\lib\classes\PluginManager.js:408:17)
at ServerlessWebpack.BbPromise.bind.then.then.then (F:\workspace\svlecma\node_modules\serverless-webpack\index.js:102:51)
at runCallback (timers.js:694:18)
at tryOnImmediate (timers.js:665:5)
at processImmediate (timers.js:647:5)
at process.topLevelDomainCallback (domain.js:121:23)

Get Support --------------------------------------------
 Docs:          docs.serverless.com
 Bugs:          github.com/serverless/serverless/issues
 Issues:        forum.serverless.com

Your Environment Information -----------------------------
 OS:                     win32
 Node Version:           10.10.0
 Serverless Version:     1.31.0

我的 serverless.yml 在这里:

https://gist.github.com/thinksource/9fd0c8728df2195b7110b3be04aec2ae

为什么json第一个元素错误?如何查看json字符串?

【问题讨论】:

  • 你能显示你的 serverless.yml/serverless.json 文件吗?
  • @WilliamMoore 这是我的文件:gist.github.com/thinksource/9fd0c8728df2195b7110b3be04aec2ae。有一次,我删除了自定义部分,这完全没有问题,但我不知道为什么我的自定义部分错误
  • 我已经修改了我的原始答案,可能会进行修复;但是我不是 100% 确定 yaml 是否需要将字符串放在引号中?
  • 我改成 webpackConfig: 'webpack.config.js',但什么也没发生。错误仍然保存。
  • 我改成 webpackConfig: 'webpack.config.js',但什么也没发生。错误还是一样。

标签: javascript json amazon-web-services yaml serverless-framework


【解决方案1】:

看到您的 serverless.yml 文件后,我相信问题很可能出在 webpack.config.js 文件中。可能值得尝试更改您的 custom 部分,并在周围加上引号:'webpack.config.js'。喜欢:

custom:
  webpack:
    webpackConfig: 'webpack.config.js'
    includeModules: true

我认为问题出在您的 App.js 类中:

const myDemoResult = {
  message: App.THE_MESSAGE,
  from: 'First lambda ',
  event
};

您的 JSON 结构无效;在传递对象事件的地方,没有给它一个键/名称。你可能想要这样的东西:

const myDemoResult = {
  message: App.THE_MESSAGE,
  from: 'First lambda ',
  event: event
};

您的常量 THE_MESSAGE 也不在您的 App 类中。你应该将它移动到 App{..} 中,如下所示:

export class App {
    static get THE_MESSAGE() { return 'Hello from the webpack 4 sample'; }
...

【讨论】:

  • 您好,我更改了事件结构并使用消息:“ttt”,替换消息部分,但仍然有同样的错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 2019-07-15
  • 2018-09-13
  • 1970-01-01
  • 2018-09-17
  • 1970-01-01
相关资源
最近更新 更多