2016-08-08 4 views
0

Я пытаюсь ограничить поля, которые пользователь может опубликовать при вставке объекта в mongodb. Я знаю, что я могу обеспечить заполнение полей, но я не могу найти, как люди могут вставлять поля, которые мне не нужны.Ограниченные поля для ввода

Это код, который у меня есть сейчас для вставки элемента.

app.post("/obj", function (req, res) { 
    var newObj = req.body; 

    //TODO filter fields I don't want ? 

    if (!(newObj .id || newObj .type)) { 
     handleError(res, "Invalid input", "Must provide a id and type.", 400); 
     return; 
    } 

    db.collection(OBJ_COLLECTION).insertOne(newObj, function(err, doc) { 
     if (err) { 
      handleError(res, err.message, "Failed to create new object."); 
     } else { 
      res.status(201).json(doc.ops[0]); 
     } 
    }); 
}); 

ответ

1

Там, скорее всего, JS собственные способы сделать это, но я предпочитаю использовать Lodash как мой инструментарий для большинства проектов, и в этом случае то, что я обычно делаю это настроить белый список разрешенных полей, а затем извлечь только те, от посланных ценности, как так:

const _ = require('lodash'); 

app.post("/obj", function (req, res) { 
    var newObj = _.pick(req.body, ['id', 'type','allowedField1','allowedField2']); 

Это довольно просто, и я обычно также определить белый список где-то еще для повторного использования (например, на модели или тому подобное).

В качестве побочного примечания я избегаю использования 'id' в качестве поля, которое кто-то может публиковать для новых объектов, если только мне это не нужно, во избежание путаницы с самогенерированным полем _id.

Кроме того, вы должны действительно изучить mongoose, а не использовать прямой драйвер mongodb, если вы хотите иметь больше возможностей управления документами на основе моделей. Помимо прочего, он удаляет любые поля с объекта, если они не определены в схеме. Я все еще использую метод _.pick(), когда есть вещи, которые являются, определенные в схеме, но я не хочу, чтобы люди менялись в определенном методе контроллера.

Смежные вопросы