ZeroCho / nodejs-book

Node.js교과서 소스 코드
803 stars 642 forks source link

dialect undefined does not support db:create/db:drop commands 이슈입니다. #794

Closed tjsrn183 closed 10 months ago

tjsrn183 commented 10 months ago

KakaoTalk_20231116_001533974 이렇게 이슈남기는게 맞는방법인지 잘 모르겠습니다. 미숙하여 죄송합니다. 제 리포지토리에서 running-mate-backend폴더에서 config/config.ts 파일에 설정이 잘못된것인지 모르겠습니다. 로컬에서는 제대로 작동을 하는데 lightsail에서는 위 사진과 같이 에러가 뜹니다. 상황설명을 하겠습니다.

  1. 책대로 aws lightsail에 mysql을 설치하였고 아파치 서버 종료완료 하였습니다.
  2. .env파일은 깃헙에 올리지않고 lightsail에서 sudo vim .env를 이용해서 COOKIE_SECRET=~,KAKAO_ID=,SEQUELIZE_PASSWORD=""이렇게 하였습니다.
  3. dialect를 dialect:"mysql"로해보기도하고 const dialect: Dialect = "mysql"; 이렇게해서 대입해보기도 하였습니다.
  4. models/index.ts에서 export const sequelize = new Sequelize.Sequelize( config.database, config.username, config.password, { dialect: "mysql", host: config.host } ); 이렇게 해보기도하고 export const sequelize = new Sequelize.Sequelize( config.database, config.username, config.password, config); 이렇게 해보기도하였습니다.
  5. 모든 기능이 로컬에서는 작동하는데 lightsail에서만 이 오류가 나타납니다. 수차례 구글링을해도 뚜렷한 방법이 보이지 않네요
ZeroCho commented 10 months ago

lightsail의 config/config.ts에서 dialect가 없는 것 아닌가요? dialect가 undefined라고 뜨네요. 지금 보면 config/config.ts와 config/config.js 둘 다 존재하는데 config/config.js가 config/config.ts랑 서로 다른 내용인 것 아닌가요?

tjsrn183 commented 10 months ago

lightsail의 config/config.ts에서 dialect를 설정하는방법이 로컬에서와 다른가요..? 코드에 config파일에는 포함시켜놨습니다.
2차 검증으로 lightsail에서 리눅스 명령어 cd,ls,cat등을통해 dialect코드가 포함되어있는지도 확인하였습니다. config.ts를 js로 단순변환한 파일이라 같은내용 아닌가요..? npx tsc를 통해 변환시킨.. 로컬에선 되는데 lightsail에서만 안되는거면 제가 설정을 잘못한것일까요

ZeroCho commented 10 months ago

아뇨, 로컬과 똑같습니다. config.ts랑 config.js 내용은 당연히 같아야 하는데, 그 당연한 상황이 벌어졌다면 에러도 발생하지 않았겠죠. 당연한 상황이 벌어지지 않은 겁니다. config.js가 틀린 거겠죠.

tjsrn183 commented 10 months ago

아무리봐도 해결책이 보이지않네요.. 그래도 좀 더 해보겠습니다. 질문받아주셔서 감사합니다

ZeroCho commented 10 months ago

config.ts랑 config.js 둘 다 올려보세요

tjsrn183 commented 10 months ago

config.ts

import dotenv from "dotenv"; dotenv.config();

import { Dialect } from "sequelize";

const dialect: Dialect = "mysql";

const config = { development: { username: "root", password: process.env.SEQUELIZE_PASSWORD || "", database: "running_mate", host: "127.0.0.1", dialect: dialect, }, test: { username: "root", password: process.env.SEQUELIZE_PASSWORD || "", database: "database_test", host: "127.0.0.1", dialect: dialect, }, production: { username: "root", password: process.env.SEQUELIZE_PASSWORD || "", database: "running_mate_production", host: "127.0.0.1", port: 8001, dialect: dialect, }, };

export default config;

config.js

"use strict"; var importDefault = (this && this.importDefault) || function (mod) { return (mod && mod.esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "esModule", { value: true }); const dotenv_1 = __importDefault(require("dotenv")); dotenv_1.default.config(); const dialect = "mysql"; const config = { development: { username: "root", password: process.env.SEQUELIZE_PASSWORD || "", database: "running_mate", host: "127.0.0.1", dialect: dialect, }, test: { username: "root", password: process.env.SEQUELIZE_PASSWORD || "", database: "database_test", host: "127.0.0.1", dialect: dialect, }, production: { username: "root", password: process.env.SEQUELIZE_PASSWORD || "", database: "running_mate_production", host: "127.0.0.1", port: 8001, dialect: dialect, }, }; exports.default = config;

index.ts

import { Sequelize } from "sequelize"; //import { Sequelize } from "sequelize-typescript"; import User from "./user"; import Post from "./post"; import Run from "./run"; import ChatRoom from "./chatRoom"; import Chat from "./chat"; import configObj from "../config/config"; const env = (process.env.NODE_ENV as "production" | "test") || "development"; const config: any = configObj[env];

export const sequelize = new Sequelize( config.database, config.username, config.password, { host: config.host, dialect: "mysql" } );

User.initiate(sequelize); Post.initiate(sequelize); Run.initiate(sequelize); ChatRoom.initiate(sequelize); Chat.initiate(sequelize);

User.associate(); Post.associate(); Run.associate(); ChatRoom.associate(); Chat.associate();

export { User, Post, Run, ChatRoom, Chat };

입니다

ZeroCho commented 10 months ago

exports.default = config; 지금 config.js 마지막이 이런데 module.exports = config 여야합니다.

tjsrn183 commented 10 months ago

와!!!!!!!!!! 선생님 됩니다!!!!!!!!!! 저의 사흘이 선생님에겐 5분이면 되는군요.. 이게 타입스크립트로 export = config; 이렇게 작성해줘야 js로 변환했을때 module.exports = config 이렇게 되는것같네요! 정말 감사합니다. 항상 건강하시고 행복하시고 복은 다받으세요!