Unitech / angular-bridge

Link models easily via a REST interface between Mongoose/Node-Express/Angular.js
208 stars 22 forks source link

Override generated paths #21

Closed konsumer closed 8 years ago

konsumer commented 8 years ago

If I have a user-model, I'd like to be able to do this:

angularBridge.addResource('user', User, {hide: ['__v', 'password']})

So no secret info is shared on most endpoints, but I also want to allow the user to set their own password (which is encrypted in the model's pre('save')):

middleware.post('/user', (req, res) => {
  const user = new User({
    email: req.body.email,
    username: req.body.username,
    password: req.body.password
  })
  user.save()
    .then(user => {
      return sendEmail('register', {user: user})
        .then(() => {
          delete user._id
          delete user.password
          res.json(user)
        })
    })
    .catch(e => {
      delete e.op
      res.status(400).json(e)
    })
})

As it is, I get a Path 'password' is required. message, because it's hidden.

Maybe angular-bridge could check if the route exists before it overwrites it?

konsumer commented 8 years ago

Ah, nevermind. I can override it by deleting req.resource, If mine comes first.

konsumer commented 8 years ago

Or even better, add next param, but never call it:

middleware.post('/user', (req, res, next) => {
  const user = new User({
    email: req.body.email,
    username: req.body.username,
    password: req.body.password
  })
  user.save()
    .then(user => {
      return sendEmail('register', {user: user})
        .then(() => {
          delete user._id
          delete user.password
          res.json(user)
        })
    })
    .catch(err => res.status(400).send(err))
})