해결된 질문
작성
·
207
0
안녕하세요 제로초님
강의를 보면서 시퀄라이즈 생성시
db를 미리 만들어 놓은 후 sequelize-auto 로 모델들을 생성해주면
init-models 등 모델 관련 js가 생기는데요
여기서 db접속이 안되는 것 같은 에러가 발생합니다.
예를들어 User모델을 가지고온 후 findOne을 하게되면 User.findOne is not a function 이런 에러가 발생하는데...
이런경우 어떻게 해결해야할까요..?
답변 1
0
const Sequelize = require('sequelize');
module.exports = function(sequelize, DataTypes) {
return sequelize.define('users', {
id: {
autoIncrement: true,
type: DataTypes.INTEGER,
allowNull: false,
primaryKey: true
},
email: {
type: DataTypes.STRING(40),
allowNull: true,
unique: "email"
},
nick: {
type: DataTypes.STRING(15),
allowNull: false
},
password: {
type: DataTypes.STRING(100),
allowNull: true
},
provider: {
type: DataTypes.STRING(10),
allowNull: false,
defaultValue: "local"
},
snsId: {
type: DataTypes.STRING(30),
allowNull: true
}
}, {
sequelize,
tableName: 'users',
timestamps: true,
paranoid: true,
indexes: [
{
name: "PRIMARY",
unique: true,
using: "BTREE",
fields: [
{ name: "id" },
]
},
{
name: "email",
unique: true,
using: "BTREE",
fields: [
{ name: "email" },
]
},
]
});
};
이렇게구요 처음보는게 init-models.js라는 곳에 관계맺는거랑
초기화 관련된게 있는 것 같습니다.
var DataTypes = require("sequelize").DataTypes;
var _domains = require("./domains");
var _follow = require("./follow");
var _hashtags = require("./hashtags");
var _posthashtag = require("./posthashtag");
var _posts = require("./posts");
var _users = require("./users");
function initModels(sequelize) {
var domains = _domains(sequelize, DataTypes);
var follow = _follow(sequelize, DataTypes);
var hashtags = _hashtags(sequelize, DataTypes);
var posthashtag = _posthashtag(sequelize, DataTypes);
var posts = _posts(sequelize, DataTypes);
var users = _users(sequelize, DataTypes);
hashtags.belongsToMany(posts, { as: 'PostId_posts', through: posthashtag, foreignKey: "HashtagId", otherKey: "PostId" });
posts.belongsToMany(hashtags, { as: 'HashtagId_hashtags', through: posthashtag, foreignKey: "PostId", otherKey: "HashtagId" });
users.belongsToMany(users, { as: 'followingId_users', through: follow, foreignKey: "followerId", otherKey: "followingId" });
users.belongsToMany(users, { as: 'followerId_users', through: follow, foreignKey: "followingId", otherKey: "followerId" });
posthashtag.belongsTo(hashtags, { as: "Hashtag", foreignKey: "HashtagId"});
hashtags.hasMany(posthashtag, { as: "posthashtags", foreignKey: "HashtagId"});
posthashtag.belongsTo(posts, { as: "Post", foreignKey: "PostId"});
posts.hasMany(posthashtag, { as: "posthashtags", foreignKey: "PostId"});
domains.belongsTo(users, { as: "User", foreignKey: "UserId"});
users.hasMany(domains, { as: "domains", foreignKey: "UserId"});
follow.belongsTo(users, { as: "follower", foreignKey: "followerId"});
users.hasMany(follow, { as: "follows", foreignKey: "followerId"});
follow.belongsTo(users, { as: "following", foreignKey: "followingId"});
users.hasMany(follow, { as: "following_follows", foreignKey: "followingId"});
posts.belongsTo(users, { as: "User", foreignKey: "UserId"});
users.hasMany(posts, { as: "posts", foreignKey: "UserId"});
return {
domains,
follow,
hashtags,
posthashtag,
posts,
users,
};
}
module.exports = initModels;
module.exports.initModels = initModels;
module.exports.default = initModels;
init-models입니다.
sequelize-auto는 그럼 쓰면 안되는건가요...?
db쪽 테이블 설계 후 sequelize-auto 하면 편하게 모델 생성할수있다고 보고 해본건데...
안되는건가요..?
편하게 모델 생성했으니 다른 부분만 조금 고치면 되는 거죠. 완벽하게 자기 입맛에 맞게 고쳐주는 툴은 별로 없습니다. 어느 정도는 직접 수정할 각오 하셔야해요.