NodeJS和HTTP:如何在POST / PUT调用中以字符串形式发送JSON内容,而不是创建新密钥

时间:2018-09-28 22:11:26

标签: json node.js angular http

我构建了一个API服务,该服务将处理REST请求并使用它们在MongoDB实例上执行CRUD操作。此应用程序是独立的(通过设计),应作为任何调用它的传递。我在Angular中构建的另一个应用程序正在调用此API与我的MongoDB实例进行交互。我一直在尝试从表单构造JSON有效负载,效果很好。我得到类似的东西:

{ "_id":"111111111", "name":"herp", "address":"derp", "city":"foo", "state":"bar", "zip":"11111", "phone":"111-222-3333"}    

然后我尝试使用该JSON并将其发送到服务,但是一旦该服务获得它的所有权并且包含JSON对象的变量名被转换为实际密钥,翻译中就会丢失一些东西在请求中,以JSON作为其值。我正在这样呼叫服务:

const httpOptions = {
    headers: new HttpHeaders({ 'Content-Type': 'application/json', 'Cache-Control': 'no-cache' })
};

updateStuff(update){
   console.log("Sending: " + JSON.stringify(update) + " for update");
   return this.http.put('http://localhost:3000/api/test/_update', {dbName:"testDb",collection:"testing",update}, httpOptions);
}

哪个日志:

Sending: {"name":"blah","address":"111 Anystreet","city":"MyCity","state":"NY","zip":"11111","phone":"555-111-2222","_id":"5ba914df13236f7a6ea3e233"} for update

所以我知道在进行呼叫之前,数据就可以了。但是,另一方面,在获取数据时会看到以下内容:

Received request: {"dbName":"testDb","collection":"testing","update":{"name":"blah","address":"111 Anystreet","city":"MyCity","state":"NY","zip":"11111","phone":"555-111-2222","_id":"5ba914df13236f7a6ea3e233"}}

而不是我的预期,如下所示:

{"dbName":"testDb","collection":"testing","name":"blah","address":"111 Anystreet","city":"MyCity","state":"NY","zip":"11111","phone":"555-111-2222","_id":"5ba914df13236f7a6ea3e233"}

如何告诉HTTP请求本身发送数据,而不是构造一个名称为“ update”的新密钥并将有效载荷作为其值粘贴在其中?我尝试了JSON.stringify,但是最终发送了同样的东西,但是所有括号前面都带有一串反斜杠。仍将其全部发送给一个名称为“ update”的密钥。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

您的问题在这里:

size

上面的陈述是这个的简写:

{dbName:"testDb",collection:"testing",update}

您要做的是this

{dbName:"testDb",collection:"testing",update:update}

这是它的简写:

{dbName:"testDb",collection:"testing",...update}