【问题标题】:Mongoose .save() returns empty error object, does not save in DBMongoose .save() 返回空错误对象,不保存在数据库中
【发布时间】: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 函数可以进行回调,您可以在其中检查是否发生错误。
  • 你说得对,连接有问题。我相信我的密码引起了问题,因为其中有特殊字符并且我没有对它们进行编码。非常感谢你的帮助。输入一个答案,我会改正的。

标签: node.js mongodb typescript mongoose


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2017-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-27
    • 1970-01-01
    • 2020-09-14
    相关资源
    最近更新 更多