невозможно сделать запрос на редактирование через угловой - PullRequest
1 голос
/ 02 мая 2019

Я делаю основной инструмент отслеживания проблем. Я могу сделать HTTP-запрос к API-интерфейсу сервера, который я построил. Кроме запроса PUT, все остальные запросы работают нормально.

Когда я пытаюсь редактировать данные пользователя. я получаю сообщение об ошибке ниже

Access to XMLHttpRequest at 'http://trackerapi.sanjayinfotechy.com/api/v1/user/:userId/edit?authToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqd3RpZCI6IlBQT1ROYTlDbSIsImlhdCI6MTU1Njc4NTEwMjQ1NSwiZXhwIjoxNTU2ODcxNTAyLCJzdWIiOiJhdXRoVG9rZW4iLCJpc3MiOiJlZENoYXQiLCJkYXRhIjp7Im1vYmlsZU51bWJlciI6MTIzNDU2LCJmaXJzdE5hbWUiOiJtdW5uYSIsImxhc3ROYW1lIjoiZGhpbmlsIiwidXNlcklkIjoiZWYybU93aVdzIiwiZG9iIjoiMTk5Ni0wMy0wOFQwMDowMDowMC4wMDBaIiwiY29tcGFueU5hbWUiOiJXZWxscyBGYXJnbyIsInJvbGUiOiJBbmFseXN0IiwiZW1haWwiOiJtdW5uYS5kaGluaWxAZ21haWwuY29tIn19.CUctgYPuZmwsZf3rFTQqTWFOsttBdz6bTZFt7mPxYcY' from origin 'http://localhost:4200' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Когда я пытаюсь выполнить тот же самый положенный запрос в почтальоне, я могу успешно редактировать данные без каких-либо ошибок. Ошибка возникает только в угловом 4 проекте.

см. Мой код ниже

http.service.ts file

public editUserDetails(authToken, userId, data): Observable<any>{

    const params = new HttpParams()
      .set('userId', userId)
      .set('firstName', data.firstName)
      .set('lastName', data.lastName)
      .set('dob', data.dob)
      .set('companyName', data.companyName)
      .set('role', data.role)
      .set('mobileNumber', data.mobileNumber)
      .set('email', data.email)
      .set('password', data.password)

    return this.http.put(`${this.url}/user/:userId/edit?authToken=${authToken}`, params)
  } // end edit user details

и это файл edit.component.ts

public editFunction: any = () =>{
    let data = {
      firstName: this.currentUser.firstName,
      lastName: this.currentUser.lastName,
      dob: this.currentUser.dob,
      companyName: this.currentUser.companyName,
      role: this.currentUser.role,
      mobileNumber: this.currentUser.mobileNumber,
      email: this.currentUser.email,
    }

    this._http.editUserDetails(this.authToken, this.currentUserId, data).subscribe(
      (apiResponse)=>{
        if(apiResponse.status === 200){
          this.toastr.customToastr('Details Edited Successfully')
          setTimeout(()=>{
            this.router.navigate(['/user-info'])
          }, 1500)
        } else {
          this.toastr.warningToastr(apiResponse.message)
        }
      },
      (err)=>{
        console.log(err)
        this.toastr.errorToastr(`Some Error Occured`)
      }
    )
  } // end edit function

код для редактирования в API бэкэнда с использованием nodejs

let editUser = (req, res)=>{
    let options = req.body || req.query || req.params
    UserModel.update({userId: req.params.userId || req.body.userId || req.query.userId}, options, {multi: true}, (err, result)=>{
        if (err) {
            console.log(err)
            logger.error(err.message, 'User Controller: editUser', 10)
            let apiResponse = response.generate(true, 'Failed To Edit User Details', 500, null)
            res.send(apiResponse)
        } else if (check.isEmpty(result)) {
            logger.info('No User Found', 'User Controller: editUser')
            let apiResponse = response.generate(true, 'No User Found', 404, null)
            res.send(apiResponse)
        } else {
            let apiResponse = response.generate(false, 'User Details Edited successfully', 200, result)
            res.send(apiResponse)
        }
    })
} // end edit user


пожалуйста, дайте мне знать, где я делаю код неправильно.

Ответы [ 2 ]

1 голос
/ 02 мая 2019

Внимательно посмотрите на ошибку, которую вы получаете, и получите ответ:

Нет заголовка 'Access-Control-Allow-Origin' в запрошенном ресурс.

Это проблема CORS, а не проблема вашего кода. Подробнее о CORS здесь .

Таким образом, ресурс (http API), который вы вызываете, не был настроен для источника запроса, который он должен разрешить и вернуть ответ.

Проблема, скорее всего, заключается в том, что вы делаете запрос POST из другого источника (вы можете проверить источник запроса в инструменте разработчика chrome на вкладке сети), а API находится в другом домене, и, следовательно, вы получаете эту ошибку ,

Попросите разработчика API включить источник, откуда вы делаете этот запрос.

0 голосов
/ 02 мая 2019

нашел решение.Изменив приведенный ниже код в моем промежуточном программном обеспечении маршрутизации '

я написал let headers = {}

я изменил его на var headers = {}

Я не знаю, как этовоздействие.но это работает.Если кто-то знает причину.пожалуйста, дайте мне знать.

...