我正在使用restAPI进行项目,并且要求管理员可以删除驱动程序。
他们每个人都有自己的架构和模型在他们自己的.js文件中
var mongoose = require('mongoose');
var AdminSchema = new mongoose.Schema({
name: String
});
mongoose.model('Admin', AdminSchema); // Model name is 'Admin'
module.exports = mongoose.model('Admin'); // Export for use in other parts of program
同样对于司机......
我正在使用Postman测试所有这些,
现在我不得不让我的管理员能够使用他们的ID
从管理数据库和驱动程序数据库中删除管理员的DELETE方法如下:
var Admin = require('./Admin');
var Driver = require('./Driver');
.
.
.
router.delete('/:id', function (req, res) {
Admin.findByIdAndRemove(req.params.id, function (err, admin) {
if (err) return res.status(500).send("There was a problem deleting the admin.");
res.status(200).send("Admin: " + admin.name + " was deleted.");
});
});
我尝试了很多东西,包括看起来像这样的方法
router.delete('/:id', function (req, res) {
Admin.findByIdAndRemove(req.params.id, function (err, admin) {
if (err) return res.status(500).send("There was a problem deleting the admin.");
res.status(200).send("Admin: " + admin.name + " was deleted.");
});
Driver.findByIdAndRemove(req.params.id, function (err, driver) {
if (err) return res.status(500).send("There was a problem deleting the driver.");
res.status(200).send("Driver: " + driver.name + " was deleted.");
});
});
但这不起作用,我尝试单独使用这些方法,但程序只查找最先出的方法,所以如果我有方法在admin的delete方法之前删除驱动程序,它会找到司机,但不是管理员。它只是触发驱动程序的错误消息,并且不会触发管理员删除方法。
任何提示或建议将不胜感激。这是我第一次学习这些东西,而且非常有趣,但它非常棘手!
谢谢!
答案 0 :(得分:0)
调用数据库查询的方式不正确。调用from rest_framework import serializers
from deployedcontracts.models import DeployedContracts
class DeployedContractsSerializer(serializers.ModelSerializer):
class Meta:
model = DeployedContracts
fields = ('house_no', 'rent', 'security_deposit', 'house_owner', 'house_tenant', 'deployed_contract_address')
和Admin.findByIdAndRemove
都是异步的,因此您需要将它们视为异步。您还无法从路由处理程序中调用 Driver.findByIdAndRemove
两次。它应该导致错误“无法在发送标题后发送标题”或类似的内容。
一种方法可能是:
res.status(200).send(..
另请注意,进行多个查询会导致难以使用corect http状态,因为每个db查询可能会产生不同的结果
更好的方法是让2个路由一个用于管理员,另一个用于驱动程序
router.delete('/:id', function (req, res) {
var response = '';
Driver.findByIdAndRemove(req.params.id, function (err, driver) {
if (err)
response += "There was a problem deleting the driver.";
else
response += "Driver: " + driver.name + " was deleted.";
Admin.findByIdAndRemove(req.params.id, function (err, admin) {
if (err)
response += "There was a problem deleting the admin.";
else
response += ("Admin: " + admin.name + " was deleted.";
// you can't use error status since both db results could be different
res.status(200).send(response);
});
});
});