Angular правильно отправляет запрос put

#angular #typescript

#angular #typescript

Вопрос:

Я написал метод put с помощью Express следующим образом, но я получаю ошибку при отправке в разделе angular. Я знаю, что получаю сообщение об ошибке, потому что я не отправляю его как объект, но я не знаю, как отправить его как объект. Не могли бы вы помочь?

controller.js (серверная часть)

 Word.updateStatus = (wordId,status,result) => {
    sql.query('update wordstable set status = ? where id = ?',[status,wordId],(err,res)=> {
        if(err) {
            console.log('error : ',err);
            result(null,err);
            return;
        }
        if(res.affectedRows == 0 ) {
            result({kind:'not_found'},null);
            return;
        }
        result(null, res);

    })
}
  

service.ts

 setStatus(statusId:number, statusValue:number ) {
    return this.httpService.put(`${this.url}/status/${statusId}`,statusValue);
  }
  

component.ts

  this.wordsService.setStatus(getWord.id,1);
  

Когда я тестировал его с Postman, он успешно выполнялся.

http://localhost:3000/words/status/2

{ «статус» : 1 }

Комментарии:

1. Как выглядит тело вашего запроса Postman? Как вы указываете, похоже, что вы очень близки, но, возможно, просто нужно «обернуть» ваш statusValue в какой-то объект.

Ответ №1:

Попробуйте так

 setStatus(statusId:number, statusValue:number ) {
 const params = new HttpParams().set('status', statusValue)
 return this.httpService.put(`${this.url}/status/${statusId}`,{parmas});
}
  

Надеюсь, полезно

Комментарии:

1. Уточните «это не сработало». Что произошло? Что было отправлено? Была ли ошибка? Если да, то какая это была ошибка?

2. Он корректно работает с HttpParams, но когда дело доходит до возврата, статус не меняется.

3. @MichaelScott Так что это работает, я думаю, что ваш api не обновляет статус, поэтому вы не получаете изменений взамен

Ответ №2:

Ну, если ваша цель — отправить JSON такой формы

 { "status" : 1 }
  

тогда вам нужен PUT объект, а не примитив. Поэтому

 setStatus(statusId:number, status: number) {
    return this.httpService.put(`${this.url}/status/${statusId}`, { status });
}

  

Комментарии:

1. Большое вам спасибо за ваш ответ, но это не сработало.

Ответ №3:

Я столкнулся с таким результатом, когда попытался;

 setStatus(statusId:number, statusValue) {
    
    const params = new HttpParams().set('status',statusValue)
    console.log(params.get('status')) // incoming value: 1  this is correct 
    console.log(`${this.url}/status/${statusId}`,params) // http://localhost:3000/words/status/1
    return this.httpService.put(`${this.url}/status/${statusId}`,params); // still status 0 
  }