aws lambda node js返回对象实例的转义JSON

时间:2017-11-03 16:29:51

标签: json node.js amazon-web-services aws-lambda

我有这个简单的类定义:

function FlatField(id, content) {

  if ( content === undefined ) content = '';

  this.id = id;
  this.content = content;

}

在AWS lambda中,为什么会出现以下代码

exports.handler = (event, context, callback) => {
    var test = { id: 103, content: "fred" };
    callback(null, test );
};

返回以下干净的JSON

{
  "id": 103,
  "content": "fred"
}

而以下代码

exports.handler = (event, context, callback) => {
    var test = new FlatField( 103, 'fred' );
    callback(null, test );
};

将返回以下转义的JSON

"{\"id\":103,\"content\":\"fred\"}"

由于

1 个答案:

答案 0 :(得分:2)

似乎你已经证明了一些序列化代码,对于对象文字而言,下游的工作方式与构造函数的工作方式不同!虽然这很糟糕,但你必须做这样的事情:

function your_module_form_alter(&$form, FormStateInterface $form_state, $form_id) {
  // test you are altering the correct form so wrap the below in an IF
  $form['actions']['submit']['#submit'][] = '_your_module_custom_redirect';
}

function _your_module_custom_redirect($form, FormStateInterface $form_state) {
  $form_state->setRedirect('your route name');
}

我想你可以让自己成为一个能够解决这个问题的效用函数。

我会考虑使Flatfield成为一个返回对象文字的普通函数。然后问题就消失了:

exports.handler = (event, context, callback) => {
    var test = new FlatField( 103, 'fred' )
    callback(null, JSON.parse(JSON.stringify(test)) )
}