【问题标题】:How to return created instance in sequelize如何在 sequelize 中返回创建的实例
【发布时间】:2021-10-06 20:31:44
【问题描述】:

我正在为一个新项目测试 sequelize,但我似乎无法返回我创建的实例,感谢您的帮助。

我的创建方法:

exports.create = (req, res) => {
    let user = {
        "username" : req.body.username,
        "email"    : req.body.email,
        "pseudo"   : req.body.pseudo,
        "password" : bcrypt.hashSync(req.body.password,10),
        "created_at" : sequelize.fn('NOW')
    };
   
    if (!user.username || !user.email) {
        res.status(201).send("username required!")
    }

    const newUser = async (user) => {
        await User.create(user)
        .then((data) => {return data;console.log(data);})
        .catch((e)=>{console.log(e)});}

    console.log(newUser); // this returns [AsyncFunction: newUser]
    res.status(200).send({"message" : "ok"});
    
}

这是我的模型:

const { Sequelize, DataTypes } = require('sequelize');
const sequelize = require('../services/database_connection');
const validate = require('validator');

const User = sequelize.define('user',{
  id ,
  username ,
  email ,
  pseudo,
  password,
  created_at
}, {
  timestamps : false,
  freezeTableName : true,
});

module.exports = User;

newUser 实例插入数据库后如何返回?

【问题讨论】:

    标签: javascript node.js promise orm sequelize.js


    【解决方案1】:

    您只需创建一个函数,该函数将在 Promise 中返回 user,但您从不调用它。 尝试下一个:

    承诺
    exports.create = (req, res) => {
        let user = {
            "username" : req.body.username,
            "email"    : req.body.email,
            "pseudo"   : req.body.pseudo,
            "password" : bcrypt.hashSync(req.body.password,10),
            "created_at" : sequelize.fn('NOW')
        };
       
        if (!user.username || !user.email) {
            res.status(201).send("username required!")
        }
    
        User.create(user)
            .then((data) => { res.status(200).send(data)})
            .catch((e)=>{ console.log(e); res.status(500).end()});}        
    }
    
    或异步/等待
    exports.create = async (req, res) => {
        let user = {
            "username" : req.body.username,
            "email"    : req.body.email,
            "pseudo"   : req.body.pseudo,
            "password" : bcrypt.hashSync(req.body.password,10),
            "created_at" : sequelize.fn('NOW')
        };
       
        if (!user.username || !user.email) {
            res.status(201).send("username required!")
        }
    
        const newUser = await User.create(user);
        res.status(200).send(newUser);
    }
    

    【讨论】:

    • 感谢第二个解决方案使用 async / await 效果最佳
    • @Majd 这样您就可以将其标记为正确答案)
    【解决方案2】:
    exports.create = (req, res) => {
        let user = {
            "username": req.body.username,
            "email": req.body.email,
            "pseudo": req.body.pseudo,
            "password": bcrypt.hashSync(req.body.password, 10),
            "created_at": sequelize.fn('NOW')
        };
    
        if (!user.username || !user.email) {
            res.status(201).send("username required!")
        }
    
        User.create(user)
            .then((data) => {
                console.log(data);
                res.status(200).send({ "message": "ok" });
            })
            .catch((e) => {
                console.log(e);
                res.status(500).send({ "message": "Internal Server Error" });
            });
    
    }
    

    不要在异步等待中使用 Promise (.then)。

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 2016-12-05
    • 2019-04-04
    • 2018-12-22
    • 2020-02-22
    • 2017-02-23
    • 2022-07-27
    • 2019-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多