Mongoose .save() 返回空错误对象,不保存在数据库中

Posted

技术标签:

【中文标题】Mongoose .save() 返回空错误对象,不保存在数据库中【英文标题】:Mongoose .save() returns empty error object, does not save in DB 【发布时间】:2021-05-29 21:26:54 【问题描述】:

我正在尝试学习 MongoDB 和 typescript,但目前在尝试创建我的第一个文档时遇到了一些问题。

当我从邮递员发出 post 请求时,我收到“Sending request” 5 秒,然后它超时并返回一个空的错误对象:


    "message": 

并且发布的数据没有保存在我的 mongoDB 中。

我首先在我的服务器中设置这样的连接:

mongoose.connect(<string> process.env.DB_CONNECTION,  useNewUrlParser: true, () =>
    console.log("connected to DB!")
);

并取回记录的正确语句,因此我已连接。

我有一个看起来像这样的模型:

import  model, Schema, Model, Document  from "mongoose";

export interface IUser extends Document 
    name: string,


const UserSchema: Schema = new Schema(
    
        name: 
            type: Schema.Types.String,
            required: true,
        ,
    ,
    <any> timeStamps: true
);

const User: Model<IUser> = model<IUser>('User', UserSchema);
export default User;

问题可能就在那里,但我认为不是。

然后,这是我对我调用的端点的发布请求:

router.post('/add', async (req: Request, res: Response): Promise<any> => 
    try 
        const user: IUser = new User(
            name: req.body.name
        );

        const savedUser: IUser = await user.save();

        res.status(200).json(savedUser);
     catch (err: any) 
        res.status(500).json(message: err);
        console.log("There was an error");
    
)

这是我认为每次请求都停留在等待 .save() 时出现错误的地方

任何帮助都会很棒!谢谢!

【问题讨论】:

您正在等待name.save(),但模型的变量名为game @MontgomeryWatts 我的错误。我正在等待 user.save(),但我在写问题时写错了变量。我编辑了代码以修复此更改。 您能否确认您已正确连接到 MongoDB? mongoose.connect 函数可以进行回调,您可以在其中检查是否发生错误。 你说得对,连接有问题。我相信我的密码引起了问题,因为其中有特殊字符并且我没有对它们进行编码。非常感谢你的帮助。输入一个答案,我会改正的。 【参考方案1】:

问题在于初始数据库连接,密码包含未编码的字符。编码特殊字符的一种解决方案是使用内置的encodeURIComponent() 函数。

【讨论】:

以上是关于Mongoose .save() 返回空错误对象,不保存在数据库中的主要内容,如果未能解决你的问题,请参考以下文章

Mongoose 模型的 save() 不会更新空数组

Mongoose populate() 返回没有错误的空数组

无法使用 mongoose Model.save() 保存 - 给出内部服务器错误

在 Mongoose 保存后挂钩中捕获并忽略/抑制错误

如何从 saveAsync 返回一个 Mongoose 对象?

Mongoose 查询返回带有空数组的嵌套文档