尝试使用Sequelize挂钩时收到“ TypeError:无法读取未定义的属性'0'”消息

时间:2020-04-20 10:19:52

标签: mysql node.js express sequelize.js sequelize-cli

我正在尝试使用Sequelize挂钩在创建用户时自动创建配置文件,但是它似乎无法正常工作。谁能指出我做错了什么?注意我正在使用Sequelize 5.21.6和mysql2 2.10.0软件包。

这是我的模特:

User.js

'use strict';
module.exports = (sequelize, DataTypes) => {
    const User = sequelize.define(
        'User',
        {
            name: DataTypes.STRING,
            username: DataTypes.STRING,
            email: DataTypes.STRING,
            password: DataTypes.STRING,
        },
        {
            hooks: {
                afterCreate: (user, options) => {
                    Profile.create({ userId: user.id });
                },
            },
        }
    );

    User.associate = function (models) {
        User.hasOne(models.Profile);
    };
    return User;
};

Profile.js

'use strict';
module.exports = (sequelize, DataTypes) => {
    const Profile = sequelize.define(
        'Profile',
        {
            location: DataTypes.STRING,
            websiteUrl: DataTypes.STRING,
            bio: DataTypes.TEXT,
            userId: DataTypes.INTEGER,
        },
        {}
    );
    Profile.associate = function (models) {
        Profile.belongsTo(models.User);
    };
    return Profile;
};

这是我的移民:

用户迁移

'use strict';
module.exports = {
  up: (queryInterface, Sequelize) => {
    return queryInterface.createTable('Users', {
      id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER
      },
      name: {
        type: Sequelize.STRING
      },
      username: {
        type: Sequelize.STRING
      },
      email: {
        type: Sequelize.STRING
      },
      password: {
        type: Sequelize.STRING
      },
      createdAt: {
        allowNull: false,
        type: Sequelize.DATE
      },
      updatedAt: {
        allowNull: false,
        type: Sequelize.DATE
      }
    });
  },
  down: (queryInterface, Sequelize) => {
    return queryInterface.dropTable('Users');
  }
};

个人资料迁移

'use strict';
module.exports = {
    up: (queryInterface, Sequelize) => {
        return queryInterface.createTable('Profiles', {
            id: {
                allowNull: false,
                autoIncrement: true,
                primaryKey: true,
                type: Sequelize.INTEGER,
            },
            location: {
                type: Sequelize.STRING,
            },
            websiteUrl: {
                type: Sequelize.STRING,
            },
            bio: {
                type: Sequelize.TEXT,
            },
            userId: {
                type: Sequelize.INTEGER,
                references: {
                    model: 'Users',
                    key: 'id',
                },
            },
            createdAt: {
                allowNull: false,
                type: Sequelize.DATE,
            },
            updatedAt: {
                allowNull: false,
                type: Sequelize.DATE,
            },
        });
    },
    down: (queryInterface, Sequelize) => {
        return queryInterface.dropTable('Profiles');
    },
};

这是我的路由器:

const express = require('express');
const router = express.Router();
const models = require('../models');

// Create a new user
router.post('/', (req, res, next) => {
    models.User.create({
        name: req.body.name,
        username: req.body.username,
        email: req.body.email,
        password: req.body.password,
    })
        .then((user) => {
            res.json({ message: 'Profile created successfully' });
        })
        .catch((err) => {
            res.json({ message: err.errors[0].message });
        });
});

0 个答案:

没有答案