При отражении глагол DELETE
, вероятно, не подходит для "списка" контента, и он лучше подходит для POST
или PUT
или даже PATCH
.Для всех остальных глаголов общепринятым является то, что они будут иметь тело запроса, подходящее для хранения таких данных, как «список».
Как правило, в POST
нет ничего плохого, а в не «официально», что DELETE
не должен посылать тело контента , вам, вероятно, лучше придерживаться стандартов, по крайней мере, с точки зрения того, что было бы наиболее широко поддержано, если бы ваш «передний конец» в конечном итоге говорил сдругая «внутренняя» структура сервиса на более позднем этапе.
Поэтому, если вместо этого POST
, тогда ваш угловой метод будет:
deleteData(ids) {
// presuming this.api points to /tasks at the correct point
return this.http.post( this.api, { ids });
}
Наэкспресс-сторона, вы хотели бы настроить промежуточное программное обеспечение анализатора тела , если вы еще этого не сделали:
const bodyParser = require('body-parser');
app.use(bodyParser.json());
А затем в вашем фактическом контроллере маршрута просто верните массив из req.body
со специально названным маршрутом для запроса POST
:
app.post('/tasks/delete', function(req,res) {
var myquery = { _id: { $in: req.body.ids } };
Model.deleteMany(myquery, function(err, result) {
if (err) throw err;
if (result) {
res.json(result)
}
});
});
Следует также отметить, что mongoose поддерживает deleteMany()
непосредственно на модели, поэтому нет необходимостиДля использования средства доступа collection
к базовому объекту драйвера Collection
.Кроме того, использование метода mongoose гарантирует, что если ваш список ids
действительно должен быть ObjectId
значениями (как обычно для _id
), то они будут «автоматически транслироваться» из строк, которые были отправлены с клиента,Фактически, независимо от типа схемы для поля в любом запросе, mongoose позаботится об этом при использовании своих собственных методов.
Использование DELETE
действительно должно быть зарезервировано для запросов с одним параметром "в URL", таких как:
app.delete('/tasks/:id', function(req,res) {
var myquery = { _id: req.params.id };
Model.deleteOne(myquery, function(err, result) {
if (err) throw err;
if (result) {
res.json(result)
}
});
});