해결된 질문
작성
·
424
0
require('dotenv').config();
const PORT = process.env.PORT;
const dotenv = require('dotenv');
const express = require('express');
const compression = require("compression");
const methodOverride = require("method-override");
const cors = require("cors");
const userRouter = require("./routes/userRoute");
const boardRouter = require("./routes/boardRoute");
const authRouter = require('./routes/auth'); // 인증 라우터
const ejsMate = require('ejs-mate');
const path = require('path');
const session = require('express-session');
const morgan = require('morgan');
const nunjucks = require('nunjucks');
const passport = require('passport');
const passportConfig = require('./passport');
const { sequelize } = require('../models/index');
const cookieParser = require('cookie-parser');
const app = express();
passportConfig();
nunjucks.configure('views', {
express : app,
watch : true,
});
sequelize.sync({ force: true })
.then(() => {
console.log("데이터 베이스 연결 성공")
})
.catch((err) => {
console.log(err);
});
app.engine('ejs', ejsMate)
app.set('view engine', 'ejs');
app.set('views', path.join(__dirname, 'views'))
app.use(express.urlencoded({ extended: true }));
app.use(compression());
app.use(express.json());
app.use(express.urlencoded({extended:true}));
app.use(methodOverride());
app.use(cors());
app.use(cookieParser(process.env.COOKIE_SECRET));
app.use(
session({
resave: false,
saveUninitialized: false,
secret: process.env.COOKIE_SECRET,
cookie: {
httpOnly: true,
secure: false,
},
}),
);
//! express-session에 의존하므로 뒤에 위치해야 함
app.use(passport.initialize()); // 요청 객체에 passport 설정을 심음
app.use(passport.session()); // req.session 객체에 passport정보를 추가 저장
// passport.session()이 실행되면, 세션쿠키 정보를 바탕으로 해서 passport/index.js의 deserializeUser()가 실행하게 한다.
app.use('/', userRouter);
app.use('/', boardRouter);
app.use('/auth', authRouter);
app.get('/', (req,res)=>{
res.render('home')
})
app.listen(PORT, () => {
console.log(`SERVING ON THE ${PORT}`);
})
module.exports = app;
DB_HOST = localhost
DB_USER = root
DB_PASS = tkfkdgo12
DB_NAME = nodejs
PORT = 3000
JWT_SECRET = softsquared_jwt_secret_key_07040014087
COOKIE_SECRET = cookiesecret
KAKAO_ID = bcb213727449d2b53039dcca5f541c02
const Sequelize = require('sequelize'); const path = require('path'); const env = process.env.NODE_ENV || 'development'; const User = require('./user'); // config/config.json 파일에 있는 설정값들을 불러온다. // config객체의 env변수(development)키 의 객체값들을 불러온다. // 즉, 데이터베이스 설정을 불러온다고 말할 수 있다. const config = require('../config/config')[env] const db = {}; // new Sequelize를 통해 MySQL 연결 객체를 생성한다. const sequelize = new Sequelize(config.database, config.username, config.password, config) // 연결객체를 나중에 재사용하기 위해 db.sequelize에 넣어둔다. db.Sequelize = Sequelize; db.sequelize = sequelize; User.init(sequelize); // 모듈로 꺼낸다. module.exports = db;
<models 폴더 내 index.js>
const Sequelize = require('sequelize');
const path = require('path');
const env = process.env.NODE_ENV || 'development';
const User = require('./user');
// config/config.json 파일에 있는 설정값들을 불러온다.
// config객체의 env변수(development)키 의 객체값들을 불러온다.
// 즉, 데이터베이스 설정을 불러온다고 말할 수 있다.
const config = require('../config/config')[env]
const db = {};
// new Sequelize를 통해 MySQL 연결 객체를 생성한다.
const sequelize = new Sequelize(config.database, config.username, config.password, config)
// 연결객체를 나중에 재사용하기 위해 db.sequelize에 넣어둔다.
db.Sequelize = Sequelize;
db.sequelize = sequelize;
User.init(sequelize);
// 모듈로 꺼낸다.
module.exports = db;
<config.json>{ "development": { "username": "root", "password": "tkfkdgo12", "database": "nodejs", "host": "localhost", "dialect": "mysql" }, "test": { "username": "root", "password": null, "database": "database_test", "host": "127.0.0.1", "dialect": "mysql" }, "production": { "username": "root", "password": null, "database": "database_production", "host": "127.0.0.1", "dialect": "mysql" } }
비밀번호 설정도 다해줬는데 모르겠습니다 ㅠㅠ
답변 2
0
강의대로 따라서 코드 작성 후 npm start로 실행하니
sequelize.sync({force:false})
^
TypeError: sequelize.sync is not a function
[nodemon] app crashed - waiting for file changes before starting...
라고 뜹니다 ㅜ
require도 문제 없어서 다시 천천히 보니
db.sequelize = sequelize; 를
대문자로 db.sequelize = Sequelize; 로 적어서 오류났네요
답글 달아주셔서 감사합니다
0
config.js 는 없는데, 이것과는 별개로 그전에 database Nodejs랑 연결한답시고 config 폴더 내 database.js 파일을 만들어서
아래와 같은 코드 입력하고 데이터베이스를 연결해준 이력이 있는데 이것과 충돌이 일어나는걸까요?
require("dotenv").config();
const mysql = require("mysql2/promise");
const config =
{
host: `${process.env.DB_HOST}`,
user:`${process.env.DB_USER}`,
port: `3306`,
password: `${process.env.DB_PASS}`,
database: `${process.env.DB_NAME}`
}
const pool = mysql.createPool(config);
module.exports = pool;
const Sequelize = require('sequelize');
const path = require('path');
const env = process.env.NODE_ENV || 'development';
const User = require('./user');
// config/config.json 파일에 있는 설정값들을 불러온다.
// config객체의 env변수(development)키 의 객체값들을 불러온다.
// 즉, 데이터베이스 설정을 불러온다고 말할 수 있다.
const config = require('../config/config')[env]
console.log(config);
const db = {};
// new Sequelize를 통해 MySQL 연결 객체를 생성한다.
const sequelize = new Sequelize(config.database, config.username, config.password, config)
// 연결객체를 나중에 재사용하기 위해 db.sequelize에 넣어둔다.
db.Sequelize = Sequelize;
db.sequelize = sequelize;
User.init(sequelize);
// 모듈로 꺼낸다.
module.exports = db;
이렇게 console.log(config) 해줫는데 같은 오류만 나옵니다 ㅠㅠ
엇,,,혹시 몰라서 위에서 말씀드린 database.js 에 console.log(config)하니깐 얘에서는 찍히는데 그럼 얘가 먼저 선수?치고있어서 시퀄라이즈가 연결을 못시킨다고 봐야할까요?
아 그러면,, 시퀄라이즈를 쓰는거면 다음과 같이 데이터베이스 연결시켜주는 코드가 필요없게 되는걸까요? 어차피 시퀄라이즈 자체가 데이터베이스와 연동되니깐요 ?
const pool = mysql.createPool(config);
module.exports = pool;
require 부분을 빠뜨리신것 같습니다.