序列化belongsToMany辅助方法

时间:2019-11-19 20:33:48

标签: node.js sequelize.js

您好,我正在尝试应用我在关系文档n中找到的内容:n

我有一个模型(用户)

const { Model, DataTypes } = require ('sequelize');
const sequelize = require('../database/index');
const bcrypt = require('bcrypt');


class User extends Model {
    static init(sequelize){
        super.init({
            name: DataTypes.STRING,
            email: DataTypes.STRING,
            login: DataTypes.STRING,
            password: DataTypes.STRING,
        }, {sequelize, modelName: 'users'});
    }

    static associate(models){
        this.belongsToMany(models.Match, { foreignKey:'user_id', through:'users_matchs', as:'matchs'});
    }
}
User.existLogin = (login) => {
    return User.findOne({where:{login: login}});
};
User.isPassword =  (encodedPassword, password) => {
    return bcrypt.compareSync(password, encodedPassword);
};
module.exports =  User;

我的其他型号(匹配)

const { Model, DataTypes } = require ('sequelize');
const sequelize = require('../database/index');
class Match extends Model {
    static init(sequelize){
        super.init({
            name:DataTypes.STRING,
            date_start: DataTypes.DATE,
            date_finish: DataTypes.DATE,
        }, { sequelize, tableName: 'matchs' });
    }

    static associate(models){
        this.belongsToMany(models.User, { foreignKey:'match_id', through:'users_matchs', as:'users'});
    }
}
module.exports =  Match;

然后在我的控制器中尝试添加辅助表 匹配项和用户

   async testando(req,res){
        const { user_id } = req.params;
        const{name, date_start, date_finish} = req.body;

        const user = await User.findByPk(user_id);
        if(!user){
            return res.status(400).json({error: 'User not Found'});
        }

        const [ match, created ] = await Match.findOrCreate({
            where: { name }
        });
        console.log('estou aq');
        console.log(match);
        await user.addMatch(match).catch(error => console.error(error));

        return res.json(match);
    }

但是我有这个错误:

  

(节点:2440)UnhandledPromiseRejectionWarning:TypeError:match.addUser   不是功能       在testando(C:\ Users \ SpiriT \ Documents \ ApiGame \ src \ controllers \ MatchController.js:34:21)   (节点:2440)UnhandledPromiseRejectionWarning:未处理的Promise   拒绝。该错误是由抛出异步内部引起的   没有捕获块或拒绝承诺   未使用.catch()处理。 (拒绝ID:1)(节点:2440)[DEP0018]   DeprecationWarning:已弃用未处理的承诺拒绝。在   未来的人

1 个答案:

答案 0 :(得分:0)

Express不支持promise,所有拒绝都应手动处理。

尝试以下代码:

 try { 
    let Useradd=  await user.addMatch(match)
    Useradd= Useradd.data
    return res.json(Useradd)
  } catch (err) {
    next(err);
  }