微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决快速删除请求甚至不处理请求正文

我正在使用 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 举报,一经查实,本站将立刻删除。