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



我构建了一个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"的密钥发送所有内容。 任何帮助将不胜感激。

你的问题在这里:

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

上面的陈述是对此的简写:

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

您要做的是:

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

这是对此的简写:

const data = {dbName:"testDb",collection:"testing"};
for (let key in update) {
if (update.hasOwnProperty(key)) {
data[key] = update[key];
}
}

最新更新