节点服务器无法响应PUT请求

时间:2018-03-07 10:56:42

标签: node.js mongodb mongojs

我在MEAN堆栈中制作了一个非常简单的CRUD应用程序。 我已成功完成除Update功能之外的所有功能。问题不在于请求本身,而在于节点服务器无法响应。请求正在按要求更改数据库,我甚至从mongojs获得{ n: 1, nModified: 0, ok: 1 }响应。 但是,我无法将其发送回Angular前端。 我试试res.json()但是它不会全部允许我,因为它不是一个功能?但我在创建,删除和阅读中成功地做了res.json。在开发人员控制台的网络选项卡中,请求似乎处于待处理状态,并在30秒后抛出错误。 邮递员也没有运气。 如何向前端发送回复?

// Error handling
const sendError = (err, res) => {
  response.status = 501;
  response.message = typeof err == 'object' ? err.message : err;
  res.status(501).json(response);
};

// Response handling
let response = {
  status: 200,
  data: [],
  message: null
};


 // Update log <-- doesn't send response but works

router.put('/update/:id', (req, body, res) => {
  console.log("Received UPDATE request");
  console.log(req.params.id);
  const bodyToUpdate = {
    '_id': mongojs.ObjectId(req.params.id),
    'week': req.body.week,
    'type': req.body.type,
    'text': req.body.text,
    'days': req.body.days
  };
  console.log(bodyToUpdate);
  db.logs.update({
    _id: mongojs.ObjectId(req.params.id)}, bodyToUpdate, (err, res) => {
    if (err) return next(err);
    response.data = res;
    res.json(response);
    console.log(response);
  });
});


// Delete log <--does work without problems

router.post('/delete/:id', (req, res) => {
  console.log("Received DELETE request");
  console.log(req.params.id);
  db.logs.remove({
    _id: mongojs.ObjectId(req.params.id)}, (err, users) => {
    if (err) return next(err);
    console.log(response);
    response.data = users;
    res.json(response);
  });
});

服务API前端

 deleteLog(id) {
    return new Promise((resolve, reject) => {
      this._http.post('/api/delete/' + id , id)
        .map(res => res.json())
        .subscribe(res => {
          resolve(res);
          console.log(res);
        }, (err) => {
          reject(err);
        });
    });
  }

  updateLog(logToUpdate) {
    return new Promise((resolve, reject) => {
      this._http.put('/api/update/' + logToUpdate._id, logToUpdate)
        .map(res => res.json())
        .subscribe(res => {
          resolve(res);
          // console.log(res);
        }, (err) => {
          reject(err);
        });
    });
  }

1 个答案:

答案 0 :(得分:0)

正如@JithinSebastian所正确指出的那样 - 我不应该在put请求中有3个参数。我还必须在mongo更新函数中更改回调名称,因为我已经在路由器函数回调中使用了res。

// Update log
router.put('/update/:id', (req, res) => {
  console.log("Received UPDATE request");
  console.log(req.body);
  const bodyToUpdate = {
    '_id': mongojs.ObjectId(req.params.id),
    'week': req.body.week,
    'type': req.body.type,
    'text': req.body.text,
    'days': req.body.days
  };
  db.logs.update({
    _id: mongojs.ObjectId(req.params.id)
  }, bodyToUpdate, (err, logs) => {
    if (err) return next(err);
    response.data = logs;
    res.json(response);
    console.log(response);
  });
});