问题描述
目前,我使用 sequelize v6.2.0 和 node.js 来创建 rest api。
我想使用如下所示的 profile
将 user
数据添加到 scopes
。
不幸的是,它出现了 include.model.getTableName is not function
错误。
(models/user.js)
'use strict';
const {
Model,} = require('sequelize');
const Profile = require('./profile');
module.exports = (sequelize,DataTypes) => {
class User extends Model {
static associate(models) {
// define association here
User.hasOne(models.Profile,{
foreignKey: 'userId',as: 'profile',});
}
};
User.init({
username: {
type: DataTypes.STRING,allowNull: true,},email: {
type: DataTypes.STRING,allowNull: false,password: {
type: DataTypes.STRING,isverified: {
type: DataTypes.BOOLEAN,defaultValue: false,isAdmin: {
type: DataTypes.BOOLEAN,isDeleted: {
type: DataTypes.BOOLEAN,token: {
type: DataTypes.STRING,{
scopes: {
withProfile: () => ({
include: [
{
as: 'profile',model: Profile,],}),sequelize,modelName: 'User',});
return User;
};
(models/profile.js)
'use strict';
const {
Model,} = require('sequelize');
module.exports = (sequelize,DataTypes) => {
class Profile extends Model {
static associate(models) {
Profile.belongsTo(models.User,as: 'user',});
}
};
Profile.init({
userId: {
type: DataTypes.INTEGER,firstName: {
type: DataTypes.STRING,lastName: {
type: DataTypes.STRING,birthday: {
type: DataTypes.DATE,location: {
type: DataTypes.STRING,gender: {
type: DataTypes.STRING,phone: {
type: DataTypes.STRING,{
sequelize,modelName: 'Profile',});
return Profile;
};
(controllers/auth.controller.js)
const me = (req,res) => {
const scopes = ['withProfile'];
try {
// This is making error....
models.User.scope(scopes).findOne({
where: {
id: req.user.id,attributes: {
exclude: ['password','token'],}).then((result) => {
return res.status(200).json({
data: result.dataValues,});
}).catch((error) => {
return res.status(500).json({
message: error.message,});
});
} catch (error) {
return res.status(500).json({
message: error.message,});
}
};
我该如何解决这个问题?
解决方法
问题在于:
(models/user.js)
include: [
{
as: 'profile',model: sequelize.model('Profile'),},]
希望对大家有所帮助。