如何使findOrCreate的返回值可用于路由器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使findOrCreate的返回值可用于路由器相关的知识,希望对你有一定的参考价值。

所以在我的快递应用程序中,我有一个单独的文件database.js,其中包含用于插入,删除,更新等的所有模型和函数。我还为每个模型都有一个单独的控制器。

database.js

module.exports = {
    createUser: function (username, email, password) {
        return sequelize.sync().then(function () {
            User.findOrCreate({
                where: {
                    username: name,
                    email: email
                },
                defaults: {
                    username: username,
                    password: password,
                    email: email
                }
            }).then(([user, created]) => {
                console.log(user.get({plain:true}));
                console.log(created)
                });
            });
        }
    };

控制器/ user.js的

const database = require("../database.js");
module.exports = {
    register: function (req, res) {
        database.createUser(req.body.username, req.body.email, req.body.password);
        res.json({...
        })

    }
};

所以基本上我想得到用户对象和布尔值,它告诉我它是否是为路由器创建的,所以我可以检查用户是否已创建并做出适当的响应。

答案

您可以在createUser中删除then并在调用函数时解析Promise:

module.exports = {
    createUser: function (username, email, password) {
        return User.findOrCreate({
                where: {
                    username: name,
                    email: email
                },
                defaults: {
                    username: username,
                    password: password,
                    email: email
                }
            })
    };

然后,promise将解析为一个包含用户对象和您正在寻找的布尔值的数组

const database = require("../database.js");
module.exports = {
    register: function (req, res) {
        database.createUser(req.body.username, req.body.email, req.body.password)
            .then((result) => {
                const [ object, created ] = result;
                res.json({ user_is_created: created })
            })
    }
};

这不是一个完整的解决方案,您可能需要探索边缘情况和错误,但这基本上就是您的方法。

以上是关于如何使findOrCreate的返回值可用于路由器的主要内容,如果未能解决你的问题,请参考以下文章

User.findOrCreate 函数是做啥的,啥时候在护照中调用它?

MongoDB原子“findOrCreate”:findOne,如果不存在则插入,但不更新

JS:关于逻辑运算

node.js+mongoose UserSchema findOrCreate

Sails.js Waterline ORM:.findOrCreate() 没有 .populate() 方法

用包含关联续集 findOrCreate