NodeJS и HTTP: как отправлять содержимое JSON в вызове POST / PUT в виде строки, а не создавать новый ключ - PullRequest
0 голосов
/ 29 сентября 2018

Я создал службу API, которая будет обрабатывать запросы REST и использовать их для выполнения операций CRUD на экземпляре MongoDB.Это приложение является автономным (по замыслу) и должно быть сквозным для всего, что его вызывает.Другое мое приложение, которое я создал в 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 голосов
/ 29 сентября 2018

Ваша проблема здесь:

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

Вышеприведенное утверждение является сокращением для этого:

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

Что вы хотите сделать, это this :

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

Что является сокращением для этого:

const data = {dbName:"testDb",collection:"testing"};
for (let key in update) {
    if (update.hasOwnProperty(key)) {
        data[key] = update[key];
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...