javascript - 如何使 findOrCreate 的返回值可供路由器使用

标签 javascript node.js express sequelize.js

因此,在我的express应用程序中,我有一个单独的文件database.js,其中包含用于插入、删除、更新等的所有模型和函数。我还为每个模型都有一个单独的 Controller 。

数据库.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)
                });
            });
        }
    };

Controller /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({...
        })

    }
};

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

最佳答案

您可以删除 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 将解析为一个包含用户对象和您要查找的 bool 值的数组

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

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

关于javascript - 如何使 findOrCreate 的返回值可供路由器使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55762448/

相关文章:

node.js - Express 4 应用程序 - Node ./bin/www X nodejs ./bin/www

javascript - 使用预定义函数从 mongodb/mongoose 获取数据

node.js - 拦截 knex.js 查询预执行

javascript - 无法使用链接的本地 Node 模块构建项目

node.js - 在 cassandra 中更新具有大量数据(8000 万行以上)的表中的列

node.js - Node 错误 : Route. get() 需要回调函数,但得到了 [对象未定义]

node.js - Gulp-connect 显示错误 'listen EADDRINUSE' 8080

javascript - AngularJS 和 Grails 中基于角色的用户身份验证

javascript - 如何将 onclick 与 name 属性一起使用?

Javascript 获取一个数组