인프런 커뮤니티 질문&답변

이길13111님의 프로필 이미지
이길13111

작성한 질문수

[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지

sequelize-auto 질문있습니다.

해결된 질문

작성

·

207

0

안녕하세요 제로초님

강의를 보면서 시퀄라이즈 생성시 

db를 미리 만들어 놓은 후 sequelize-auto 로 모델들을 생성해주면

init-models 등 모델 관련 js가 생기는데요

여기서 db접속이 안되는 것 같은 에러가 발생합니다.

예를들어 User모델을 가지고온 후 findOne을 하게되면 User.findOne is not a function 이런 에러가 발생하는데... 

이런경우 어떻게 해결해야할까요..?

답변 1

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

User을 어떻게 임포트하셨나요?

이길13111님의 프로필 이미지
이길13111
질문자

const User = require('../models/user');
이렇게 임포트 했습니다..ㅠ
제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

models/user 올려주세요.

이길13111님의 프로필 이미지
이길13111
질문자

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라는 곳에 관계맺는거랑

초기화 관련된게 있는 것 같습니다.

이길13111님의 프로필 이미지
이길13111
질문자

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입니다.

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

지금 코드로 하면 개별 모델에 접근할 수가 없습니다. 코드를 저와 같이 바꾸셔야 합니다. 잘 보시면 저와 리턴값이 모두 다릅니다.

이길13111님의 프로필 이미지
이길13111
질문자

어디를 어떻게 바꿔야 하는건가요...?  많이 찾아봤는데 잘 모르겠습니다.ㅠㅠ

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

제 깃헙 코드요.

github.com/zerocho/react-nodebird

이길13111님의 프로필 이미지
이길13111
질문자

sequelize-auto는 그럼 쓰면 안되는건가요...?

db쪽 테이블 설계 후 sequelize-auto 하면 편하게 모델 생성할수있다고 보고 해본건데...

안되는건가요..?

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

편하게 모델 생성했으니 다른 부분만 조금 고치면 되는 거죠. 완벽하게 자기 입맛에 맞게 고쳐주는 툴은 별로 없습니다. 어느 정도는 직접 수정할 각오 하셔야해요.

이길13111님의 프로필 이미지
이길13111
질문자

아 답변감사합니다..!

이길13111님의 프로필 이미지
이길13111

작성한 질문수

질문하기