快速删除请求甚至不处理请求正文

问题描述

我正在使用 node.js、express 和 mongodb 开发 api 我有一个路由 DELETE HTTP:localhost:5000/api/users/usernames/ 我发送 包含用户名的 json 对象

我正在使用 Insomnia 提出请求。

server.js

require('dotenv').config();
const express = require('express');
const cors = require('cors');
const mongoose = require('mongoose');
const errorHandler = require('./_helpers/error-handler');



const app = express();

const port = process.env.PORT || 5000;


app.use(cors());
app.use(express.json());


const uri = process.env.ATLAS_URI;
mongoose.connect(uri,{ useNewUrlParser: true,useCreateIndex: true,useUnifiedTopology: true});
const connection = mongoose.connection;
connection.once('open',() => {
    console.log("MongoDB database connection established successfully");
});

// routers
app.use('/api/users',require('./routes/api/users/users.controller'));

app.use(errorHandler);

app.listen(port,() => {
    console.log(`Server is running on port ${port}`);
});

user.model.js

const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const Roles = require('../_helpers/roles');

const User = new Schema({
    username: { type: String,unique: true,required: true },hash: { type: String,firstName: { type: String,lastName: { type: String,role: { type: String,enum: Object.keys(Roles),createdDate: { type: Date,default: new Date() }
});

User.set('toJSON',{
    virtuals: true,versionKey: false,transform: function (doc,ret) {
        delete ret._id;
        delete ret.hash;
    }
});

module.exports = mongoose.model('User',User);

这是我的 userController js 文件

router.delete('/usernames',authorize(Roles.Admin),_deleteByUsername);

function _deleteByUsername(req,res,next) {
    userService.deleteByUsername(req.body)
        .then(() => res.status(200).json({"message": "User(s) successfully deleted!"}))
        .catch(err => next(err));
}

这是我的 userService js 文件

function _deleteByUsername(usernames) {
    Object.values(usernames).forEach(async (username) => {
        await User.findOneAndDelete({username})
    });
}

当我删除 HTTP://localhost:5000/api/users/usernames 时 使用这个 json 对象

{
    "0": "testUser1","1": "testUser2
}

它似乎甚至没有通过 _deleteByUsername 中的 req.body 这是我得到的错误

CastError: Cast to ObjectId Failed for value "usernames" at path "_id" for model "User"
    at model.Query.exec (D:\web-development-servers\order-management-system\back-end\node_modules\mongoose\lib\query.js:4358:21)
    at model.Query.Query.then (D:\web-development-servers\order-management-system\back-end\node_modules\mongoose\lib\query.js:4450:15)
    at processticksAndRejections (internal/process/task_queues.js:93:5) {
  messageformat: undefined,stringValue: '"usernames"',kind: 'ObjectId',value: 'usernames',path: '_id',reason: Error: Argument passed in must be a single String of 12 bytes or a string of 24 hex characters
      at new ObjectID (D:\web-development-servers\order-management-system\back-end\node_modules\bson\lib\bson\objectid.js:59:11)
      at castObjectId (D:\web-development-servers\order-management-system\back-end\node_modules\mongoose\lib\cast\objectid.js:25:12)
      at ObjectId.cast (D:\web-development-servers\order-management-system\back-end\node_modules\mongoose\lib\schema\objectid.js:279:12)
      at ObjectId.SchemaType.applySetters (D:\web-development-servers\order-management-system\back-end\node_modules\mongoose\lib\schematype.js:1110:12)
      at ObjectId.SchemaType._castForQuery (D:\web-development-servers\order-management-system\back-end\node_modules\mongoose\lib\schematype.js:1545:15)
      at ObjectId.SchemaType.castForQuery (D:\web-development-servers\order-management-system\back-end\node_modules\mongoose\lib\schematype.js:1535:15)
      at ObjectId.SchemaType.castForQueryWrapper (D:\web-development-servers\order-management-system\back-end\node_modules\mongoose\lib\schematype.js:1512:20)
      at cast (D:\web-development-servers\order-management-system\back-end\node_modules\mongoose\lib\cast.js:331:32)
      at model.Query.Query.cast (D:\web-development-servers\order-management-system\back-end\node_modules\mongoose\lib\query.js:4759:12)
      at castQuery (D:\web-development-servers\order-management-system\back-end\node_modules\mongoose\lib\query.js:4559:18)
      at model.Query.Query._findAndModify (D:\web-development-servers\order-management-system\back-end\node_modules\mongoose\lib\query.js:3458:23)
      at model.Query.<anonymous> (D:\web-development-servers\order-management-system\back-end\node_modules\mongoose\lib\query.js:3421:8)
      at model.Query._wrappedThunk [as _findOneAndRemove] (D:\web-development-servers\order-management-system\back-end\node_modules\mongoose\lib\helpers\query\wrapThunk.js:16:8)
      at D:\web-development-servers\order-management-system\back-end\node_modules\kareem\index.js:370:33
      at processticksAndRejections (internal/process/task_queues.js:75:11)
}

我不知道我做错了什么。我希望请求正文是 json 对象,所以我可以使用 Object.values() 但问题是我认为它甚至不会调用 _deleteByUsername

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...