让PUT路由在Angular中工作

时间:2017-08-06 00:15:31

标签: javascript mongodb angular mean-stack put

我正在寻求Angular社区的一些智慧。我正在使用MEAN堆栈处理一个简单的项目。我已经设置了我的后端api,一切都按预期工作。使用Postman,我观察到GET和PUT路由的预期行为,以检索/更新单个值 - 一个高分 - 它在MongoDB的自己的集合中保存在它自己的文档中。到目前为止一切都很好。

当事情偏离轨道时,尝试从Angular中访问PUT api端点。访问GET端点没有问题,检索和显示数据工作顺利。但是,经过大量阅读和搜索后,我无法正确访问PUT端点并在游戏玩法触发该事件时更新高分数据。以下是我认为相关的代码片段。

后端代码:

SCHEMA:

const _scoreSchema = {
    name: { type: String, required: true },
    value: { type: Number, "default": 0 }
};

途径:

router
    .route('/api/score/:highScore')
    .put(scoreController.setHighScore);

控制器:

static setHighScore(req, res) {
    scoreDAO
        .setHighScore(req.params.highScore)
        .then(highScore => res.status(200).json(highScore))
        .catch(error => res.status(400).json(error));
}

DAO:

scoreSchema.statics.setHighScore = (value) => {
  return new Promise((resolve, reject) => {

    score
            .findOneAndUpdate(
                {"name": "highScore"},
                {$set: {"value": value} }
            )
            .exec(function(err, response) {
                err ? reject(err)
                : resolve(response);
            });
  });
}

角色代码:

控制器:

private _updateHighScore(newHighScore): void {
    console.log('score to be updated to:', newHighScore)
    this._gameService
        .updateHighScore(newHighScore);
}

SERVICE:

updateHighScore(newHighScore: Number): Observable<any>  {
    console.log(newHighScore);

    let url = '/api/score/' + newHighScore;
    let _scoreStringified = JSON.stringify({value: newHighScore});

    let headers = new Headers();
    headers.append("Content-Type", "application/json");

    return this._http
                         .put(url , _scoreStringified, {headers})
                         .map((r) => r.json());
}

请注意,上面最后一段代码中的console.log(newHighScore)正确打印了要更新的新高分的值,它只是没有写入数据库。

以角度为单位的PUT路由的概念性问题是:如果api已经设置为接收成功更新数据库所需的所有信息(通过路由参数),为什么需要提供在Angular .put()函数中再次提供所有这些信息?这似乎重新发明了轮子并没有真正利用已经创建的健壮的api端点。换句话说,在深入研究文档之前,我天真地期待像.put(url)这样的东西是调用api所需的全部内容,那么我逻辑中缺少的链接是什么?

谢谢!

0 个答案:

没有答案