Безсерверный фреймворк с ошибкой разбора json - PullRequest
0 голосов
/ 16 сентября 2018

Я использую безсерверный фреймворк с 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?

1 Ответ

0 голосов
/ 17 сентября 2018

После просмотра вашего файла 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'; }
...
...