NodeJS DELETE API

时间:2017-12-15 12:16:15

标签: javascript node.js

我必须使用Node构建一个API并将其表达为具有以下要求的包:

  

/api/posts上删除 - 会有一个查询参数:id。如果   服务器有一个具有给定ID的帖子,它应该删除它和   响应应该只是200状态代码。不应该有其他帖子   受到影响;特别是,他们的ID不会改变。如果服务器没有   有一个具有给定ID的帖子,响应应该是404状态   代码。

我有以下代码可以正常使用

app.delete('/api/posts', (req, res) => {
  let id = req.query.id;
  if (typeof id !== 'number')
    id = parseInt(id, 10);
  let index;
  for (let i = 0; i < posts.length; i += 1) {
    if (posts[i].id === id) {
      index = i;
      break;
    }
  }
  if (index == null) {
    res.status(404).send();
    return;
  }
  posts.splice(index, 1);
  res.json(posts);
});

我的问题是,如果这种方法是正确的还是可以进一步改进代码? 我刚开始学习API和Node ....

1 个答案:

答案 0 :(得分:3)

我不喜欢路线定义中的逻辑。 所以我会这样写:

route.js:

const posts = require('./posts.js')

app.delete('/api/posts', (req, res) => {
    posts.delete(req.query.id)
        .then(res.json)
        .catch(() => { res.status(404).send() })
})

posts.js:

class posts {
    constructor() {
        this.posts = []
    }
    add(newPost) {
        this.posts.push(newPost)
    }

    delete(postId) {
        if (// test ob gelöscht werden kann) {
           // löschen
           return Promise.resolve(this.posts)
        } else {
           return Promise.reject(new Error('Can not delete post'))
        }
    }
}

这更像是伪代码,但希望你明白我的意思。 我能够毫无困难地识别出路线的作用和需要的东西。如果我满足要求并得到错误,那么我深入研究类定义。对我来说,这是更好的可维护性。