0

I have to build an API with Node and express as package with the following requirements:

DELETE on /api/posts — there will be one query parameters: id. If the server has a post with the given ID, it should remove it and the response should be only the 200 status code. No other posts should be affected; in particular, their IDs won't change. If the server did not have a post with the given ID, the response should be the 404 status code.

I have the following code that works ok

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);
});

My question is, if this approach is correct or the code can be improved furthermore? I just started to learn about API's and Node....

1 Answer 1

3

I do not like logic within my route definition. So i would write it like this:

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'))
        }
    }
}

This is more like pseudo code, but hopefully you get my point. I am able to recognise what the route does and what it needs with no trouble. If i fullfill the requirements and get an error then i deep dive into the class definition. For me this is better maintainable.

Sign up to request clarification or add additional context in comments.

1 Comment

oh.. I see what you mean and I get the point of writing long term solutions with better maintainability..

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.