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

Javascript 如何使findOrCreate的返回值对路由器可用,javascript,node.js,express,sequelize.js,Javascript,Node.js,Express,Sequelize.js,因此,在我的express应用程序中,我有一个单独的文件database.js,其中包含用于插入、删除、更新等的所有模型和函数。我还为每个模型提供了一个单独的控制器 database.js module.exports = { createUser: function (username, email, password) { return sequelize.sync().then(function () { User.findOrCreate(

因此,在我的express应用程序中,我有一个单独的文件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)
                });
            });
        }
    };
controllers/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中的
,然后在调用函数时解决承诺:

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 })
            })
    }
};

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

为什么您甚至在
createUser
中调用
sequalize.sync()
?这是错误的。你根本不应该在应用程序中调用它。你可能会无意中弄乱你的数据库(如果你在某个地方设置了
force:true
标志,那么你就完了),更不用说同步开销了。
sequalize.sync()
应该只在迁移期间运行。还承诺可以链返回值:您的最终
。然后
createUser
中的
可以简单地
返回[user,created]
通过
.then()
user.js
中提供它。