inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지

노드버드 7장 오류 질문드립니다

572

신민규

작성한 질문수 4

0

app.js

const express = require("express");
const cookieParser = require("cookie-parser");
const morgan = require("morgan");
const path = require("path");
const session = require("express-session");
const nunjucks = require("nunjucks");
const dotenv = require("dotenv");
const { sequelize } = require("./models");
dotenv.config();
const pageRouter = require("./routes/page");

const app = express();
app.set("port", process.env.PORT || 8001);
app.set("view engine", "html");
nunjucks.configure("views", {
    express: app,
    watch: true,
});

//force:true로 할 시 서버 재시작시 모든 데이터베이스 날리고 다시 시작, true는 개발용
sequelize
    .sync()
    .then(() => {
        console.log("데이터베이스 연결 성공");
    })
    .catch((err) => {
        console.error(err);
    });

app.use(morgan("dev"));
app.use(express.static(path.join(__dirname, "public")));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser(process.env.COOKIE_SECRET));
app.use(
    session({
        resave: false,
        saveUninitialized: false,
        secret: process.env.COOKIE_SECRET,
        cookie: {
            httpOnly: true,
            secure: false,
        },
    })
);

app.use("/", pageRouter);
app.use((req, res, next) => {
    const error = new Error(`${req.method} ${req.url} no exist router.`);
    error.status = 404;
    next(error);
});

app.use((err, req, res, next) => {
    res.locals.message = err.message;
    res.locals.error = process.env.NODE_ENV !== "production" ? err : {};
    res.status(err.status || 500);
    res.render("error");
});

app.listen(app.get("port"), () => {
    console.log(app.get("port"), "waiting at the empty port.");
});

index.js


const Sequelize = require("sequelize");
const fs = require("fs");
const path = require("path");
const env = process.env.NODE_ENV || "development";
const config = require("../config/config.json")[env]; //설정 불러오기
const db = {};
const sequelize = new Sequelize( //불러온 설정을 시퀄라이즈와 연결하는 부분
    config.database,
    config.username,
    config.password,
    config
);

const basename = path.basename(__filename); //index.js

fs.readdirSync(__dirname)
    .filter((file) => {
        return (
            file.indexOf(".") !== 0 && // .으로 시작하는 파일은 숨김 파일이라는 의미 그래서 제외
            file !== basename && //현재 파일인 index.js는 제외
            file.slice(-3) === ".js" //마무리로 확장자가 .js인 파일만 불러오기
        );
    })
    .forEach((file) => {
        const model = require(path.join(__dirname, file));
        console.log(file, model.name);
        db[model.name] = model; //model.name은 model파일에서 class의 이름과 동일함
        model.initiate(sequelize);
    });
Object.keys(db).forEach((modelName) => {
    //위에서 initiate할 때 같이 associate까지 하면 되지 않냐라고 할 수 있지만 associate는 모든 파일을 initiate해주고 해야함
    console.log(db.modelName);
    if (db[modelName].associate) {
        db[modelName].associate(db);
    }
});

module.exports = db; //시퀄라이즈와 그의 모델들은 자주 사용하니까 서로 묵어서 exports 해줌 언제어디서든 쓸 수 있게

.sync()

^

TypeError: Cannot read properties of undefined (reading 'sync')

at Object.<anonymous> (C:\Users\zzan9\OneDrive - dgu.ac.kr\nodejs\nodebirdSNS2\app.js:22:6)

at Module._compile (node:internal/modules/cjs/loader:1267:14)

at Module._extensions..js (node:internal/modules/cjs/loader:1321:10)

at Module.load (node:internal/modules/cjs/loader:1125:32)

at Module._load (node:internal/modules/cjs/loader:965:12)

at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:83:12)

at node:internal/main/run_main_module:23:47

Node.js v20.1.0

 

 

이런 오류가 뜨는데 왜 뜨는지 모르겠습니다.. 검색해도 답이 나오지 않길래 질문드립니다

node.js mysql mongodb express

답변 1

0

제로초(조현영)

db 안에 sequelize를 안 넣으셨습니다.

https://github.com/ZeroCho/nodejs-book/blob/master/ch7/7.6/learn-sequelize/models/index.js#L11

https://github.com/ZeroCho/nodejs-book/blob/master/ch9/9.1/nodebird/models/index.js#L33-L34

0

신민규

아차 싶네요.... 감사합니다!

 

깃헙 질문

0

80

2

강의 1-1 수업노트의 로드맵 링크가 작동하지 않습니다.

0

75

1

aws - lightsail 이용 관련

0

57

1

4강 http 서버 만들때 ESM방식으로 해도 될까요?

0

79

2

모듈 사용 시 단점이 있나요?

0

80

1

node.js 버전 및 typescript 적용 문의

0

92

2

12.7. 방장기능(강퇴) 질문드립니다.

0

79

2

12.7 socket.js코드 그대로 뱃겨서 했는데, socket.request.session.color가안나오네요

0

68

1

12.7 코드 그대로 뱃겨서 햇는데 스샷같이 오류가뜹니다.

0

74

2

12.7.1스스로 해보기 질문되나요

0

90

3

시퀄라이즈 실습하기 질문드립니다.

0

188

9

<7-5. 시퀄라이즈 사용하기>수업 질문 드립니다.

0

95

2

크롬에서 user id를 인풋에 입력하고 등록하면 404 에러처리 페이지가 뜹니다.

0

110

2

구매 결제관련 질문입니다 !

0

121

1

다수의 supertest 가 실행될 때 force:true로 인한 DB 초기화 문제

0

132

2

node 설치 방법이 전혀다르게 바뀐것 같습니다.

0

148

2

12강 깃허브에 있는 12.7 chat.html 복붙했는데 css오류

0

120

2

무료/프리미엄 동시 소유 시 질문

0

115

1

비주얼 스튜디오 코드로 계속 진행해도 괜찮을까요?

0

134

2

10강 cors에러 localhost:4000으로 접속했을때 에러

1

156

2

webstorm 해결할 수 없는 변수 문제

0

152

2

혹시 몽고DB 쓸거면 MySQL 강의 스킵해도 되나요?

0

147

2

LightSail 실행 중 오류 질문드립니다!

0

199

2

RedisStore 사용법 질문

0

131

2