2017-11-15 4 views
1

내 GET 요청이 작동하지만 PUT 요청이 실행되지 않는 것 같습니다. Console.log 문이 내 콘솔에 표시되기 때문에 내부에있는 기능이 제대로 실행됩니다. http PUT 요청 내의 console.log 문은 Google 크롬 콘솔이나 내 터미널에 표시되지 않습니다. 각도Express with Angular : PUT 요청이 트리거되지 않는 이유는 무엇입니까?

:

getCitiesSaved(): Observable<string[]> { 
    return this.http.get(this.url).map((data: Response) => { 
     this.currentCityList = data.json().cityAlerts; 
     return data.json().cityAlerts; 
    }); 
    } 

    addCity(cityName) { 
    let cityArr = this.currentCityList; 
    cityArr.push(cityName); 
    const body = JSON.stringify({ 
     id: this.userId, 
     cityAlerts: cityArr 
    }); 
    const headers = new Headers({ 'Content-Type': 'application/json' }); 
    console.log(body); 
    return this.http 
     .put(this.url, body, { headers: headers }) 
     .map((response: Response) => { 
     console.log('http put request ran in frontend'); 
     response.json(); 
     }) 
     .catch((error: Response) => { 
     this.errorService.handleSigninError(error.json()); 
     return Observable.throw(error.json()); 
     }); 
    } 

익스프레스 :

router.get('/users/:id', (req, res) => { 
    console.log('get user info'); 
    User.findOne({ 
    _id: req.params.id 
    }).exec((err, user) => { 
    if (err) { 
     return res.status(500).json({ 
     title: 'An error occured', 
     error: err 
     }); 
    } else { 
     console.log(user); 
     res.status(200).json(user); 
    } 
    }); 
}); 

router.put('/:users/:id', (req, res) => { 
    console.log('backend triggered'); 
    User.findOneAndUpdate(
    { 
     _id: req.params.id 
    }, 
    { $set: { cityAlerts: req.body.cityAlerts } }, 
    { upsert: true }, 
    function(err, newCityAlert) { 
     if (err) { 
     console.log(err); 
     } else { 
     console.log(newCityAlert); 
     res.send(newCityAlert); 
     } 
    } 
); 
}); 
+0

내 url은 다음과 같습니다. http : // localhost : 3000/api/users/$ {this.userId}' –

답변

2

당신은 요청을 실행하기 전에 관찰에 subscribe를 호출해야합니다. map에서 subscribe까지는 addCity() 사이로 변경해야합니다. 워드 프로세서

: https://angular.io/guide/http

참고 구독() 메소드. HttpClient에서 반환 된 Observables은 모두 냉담합니다. 요청하는 청사진입니다. subscribe()를 호출 할 때까지 아무 일도 일어나지 않으며 모든 호출이 별도의 요청을합니다. 예를 들어,이 코드는 두 번 같은 데이터로 POST 요청을 보냅니다 :

그들의 예 :

const req = http.post('/api/items/add', body); 
// 0 requests made - .subscribe() not called. 
req.subscribe(); 
// 1 request made. 
req.subscribe(); 
// 2 requests made. 

나는 희망이 도움이 - 나도이 비틀 거렸다.

관련 문제