라우터 분리시킨 후, post 로 보낸 데이터를 못받아주는 문제가 생겨서 질문드리고 싶습니다
선생님 안녕하세요
라우터를 분리시키기 전에는 req.body가 post 로 보낸 데이터를 잘 받아줬습니다
그런데, 라우터를 분리시킨 다음에, post 로 보낸 데이터를 body가 못받아줘서 원인을 잘 모르겠어서 질문드리고 싶습니다
가르쳐주시면 정말 감사하겠습니다
먼저 폴더와 파일 위치입니다
url 에 localhost:3001 입력을 하면
먼저 app.js에서
이렇게 라우팅과 랜더링을 해줘서 signup.html 이 나옵니다
그리고 여기서 회원가입 버튼을 눌러봤습니다
누르면
이렇게 signup의 email nickname passwd가
manager.js 의 req.body.email, req.body.nickname에 전달될 줄 알았습니다
그러나 에러가 생겼습니다
라우터 분리 전에는 이런 일이 없었어서 혹시 원인을 가르쳐주시면 정말 감사하겠습니다
긴 질문을 읽어주셔서 고맙습니다
아래는 소스코드입니다
signup.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>회원가입 정보 입력란</title>
</head>
<style>
.inputSubmit{
color:red; background-color: white; border-radius : 10%
}
</style>
<body bgcolor="#FFFFFF">
<div align=center>
<H2>회원가입 정보 입력란</H2>
<HR>
<form method="post" action="/add" name="form1">
<table width="650" border="0" align="center" cellspacing="0" cellpadding="5">
<tr><td>이메일</td><td><input type="text" name="email" size=30></td></tr>
<tr><td>닉네임</td><td><input type="text" name="nickname" size=30></td></tr>
<tr><td>비밀번호</td><td><input type="password" name="passwd" size=30></td></tr>
<tr><td colspan="2" align="center"> <input type="submit" name="Submit3" value="회원가입" class="inputSubmit" id ='Submit3' onclick="document.querySelector('#Submit3').style.backgroundColor='grey'"></td></tr>
</form>
</table>
</div>
</body>
</html>
manager.js
const express = require(`express`);
const path = require('path');
const morgan = require('morgan');
const nunjucks = require('nunjucks');
const router = express.Router();
const { sequelize } = require('../models');
const {User} = require('../models');
const { userInfo } = require('os');
const { isNativeError } = require('util/types');
const app = express();
app.set('view engine', 'html');
nunjucks.configure('../views', {
express: app,
watch: true,
});
sequelize.sync({ force: false })
.then( () => {
console.log("DB connected");
})
.catch( (err) => {
console.error(err);
})
router.get('/',(req,res,next)=>{
res.render('signup',{});
})
router.post('/add',(req,res,next)=>{
console.log(req.body.nickname);
console.log(req.body.email);
try{
if(req.body.email)
{
User.create({
email: req.body.email,
nickname: req.body.nickname,
password: req.body.passwd,
});
res.redirect('/');
}
}
catch(error)
{
console.log(error);
next(error);
}
})
module.exports = router;
app.js 입니다
/**
* app.js
*/
const express = require('express');
const path = require('path');
const morgan = require('morgan');
const nunjucks = require('nunjucks');
const { sequelize } = require('./models');
const {User} = require('./models');
const { userInfo } = require('os');
const { isNativeError } = require('util/types');
const managerRouter = require('./routes/manager');
// const indexRouter = require('./routes');
// const usersRouter = require('./routes/users');
const app = express();
app.set('port', process.env.PORT || 3001);
app.set('view engine', 'html');
nunjucks.configure('views', {
express: app,
watch: true,
});
sequelize.sync({ force: false })
.then( () => {
console.log("DB connected");
})
.catch( (err) => {
console.error(err);
})
app.use('/', managerRouter);
app.use(morgan('dev'));
app.use(express.static(path.join(__dirname, 'public')));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use((req, res, next) => {
const error = new Error(`${req.method} ${req.url} 라우터가 없습니다.`);
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'), '번 포트에서 대기 중');
});
답변 1
1
미들웨어 순서 조심하라고 말씀드렸죠?
라우터가 express.json, express.urlencoded 보다 위에 있으면 라우터에는 이게 적용 안 됩니다.
0
선생님 가르쳐주셔서 감사합니다
가르쳐주신대로 이렇게 해봤습니다
그러자 ,같은 에러는 해결되었는데,
아직 해결되어야 하는 에러가 있는 것 같았습니다
회원가입 버튼을 누르자
이런 에러가 생겼습니다
unique constraint error를 검색해봤는데, 원하는 정보를 얻지 못해서
번거로우시겠지만 도와주시면 정말 감사하겠습니다
아래는 소스코드입니다
app.js
/**
* app.js
*/
const express = require('express');
const path = require('path');
const morgan = require('morgan');
const nunjucks = require('nunjucks');
const { sequelize } = require('./models');
const {User} = require('./models');
const { userInfo } = require('os');
const { isNativeError } = require('util/types');
const managerRouter = require('./routes/manager');
// const indexRouter = require('./routes');
// const usersRouter = require('./routes/users');
const app = express();
app.set('port', process.env.PORT || 3001);
app.set('view engine', 'html');
nunjucks.configure('views', {
express: app,
watch: true,
});
sequelize.sync({ force: false })
.then( () => {
console.log("DB connected");
})
.catch( (err) => {
console.error(err);
})
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use('/', managerRouter);
app.use(morgan('dev'));
app.use(express.static(path.join(__dirname, 'public')));
app.use((req, res, next) => {
const error = new Error(`${req.method} ${req.url} 라우터가 없습니다.`);
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'), '번 포트에서 대기 중');
});
아래는
manager.js 입니다
const express = require(`express`);
const path = require('path');
const morgan = require('morgan');
const nunjucks = require('nunjucks');
const router = express.Router();
const { sequelize } = require('../models');
const {User} = require('../models');
const { userInfo } = require('os');
const { isNativeError } = require('util/types');
const app = express();
app.set('view engine', 'html');
nunjucks.configure('../views', {
express: app,
watch: true,
});
sequelize.sync({ force: false })
.then( () => {
console.log("DB connected");
})
.catch( (err) => {
console.error(err);
})
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
router.get('/',(req,res,next)=>{
res.render('signup',{});
})
router.post('/add',(req,res,next)=>{
console.log(req.body.nickname);
console.log(req.body.email);
try{
if(req.body.email)
{
User.create({
email: req.body.email,
nickname: req.body.nickname,
password: req.body.passwd,
});
res.redirect('/');
}
}
catch(error)
{
console.log(error);
next(error);
}
})
module.exports = router;
오늘 너무 많은 질문을 드려서 죄송합니다 ㅠㅠ
0
이 unique constraint 에러가 골때리는 게, 언제는 되고 언제는 이 에러가 뜹니다
5번 중 2번은 되고 3번은 안됩니다
컴퓨터는 기계니까 이럴 수가 없는 건데요
0
제가 db를 soft delete로 설정해서
삭제 날짜만 생기고, 실제로 레코드가 지워지진 않았습니다
삭제 기록만 있고, 실제로 레코드가 지워지지 않은 이메일과 똑같은 이름으로 회원가입하면 에러가 생겼습니다
회원가입할 때 qweqe@naver.com 으로 가입하면 문제가 생기는 거였네요
0
선생님 저 라우터 분리 관련해서 하나만 더 질문드려도 될까요? ㅠㅠ
app.js에서만 console.log( ) 콘솔출력이 되고
routes 폴더 안에 있는 .js 파일 안에서는 console.log( )를 해도 콘솔출력이 안보이더라구요
제가 console.log( ) 로 디버깅을 하는 것을 선호해서요
vs code에서도 디버그 모드에서
routes 폴더 안에 있는 js 파일들은 한줄 한줄 실행해주지도 않더라구요
그렇다면 이렇게 라우터화 시키면 디버깅 방법이 없는지가 궁금합니다
리눅스 노드 설치시 패키지
0
172
0
socket.js 에서 referer로부터 roomId를 가져올 때
0
932
3
스트리밍 방식으로 대용량 파일 업로드 & 다운로드 관련 질문
0
2297
2
a[title] 질문드립니다
0
388
1
리뉴얼 강의 및 공부 방법
0
590
1
jwt decode
0
1138
1
node.js 교과서 3판 질문드립니다
0
398
1
passport와 jwt
0
439
1
리뉴얼 강의
0
428
2
혹시 Node.js 교과서 3판 이북은 언제 나오나요?
0
359
1
몽고디비 사용자도 MYSQL부분을 들어야 하나요???
0
491
1
sql 쿼리 로그는 어떤 모듈이 작성하나요?
0
512
2
nunjucks res.render('error'); 작동을 안합니다.
0
520
1
질문있습니다.
0
349
1
multer 한글 파일 업로드시 파일명이 깨져요.
1
3545
1
수업자료는 어디있나요?
0
374
1
질문 있습니디
0
245
1
multer 사용시 file 외 name값은 못받나용?
0
431
1
코드 중복 부분 질문드립니다.
0
303
1
api 만드는 이유 질문드립니다.
0
294
1
Strategy의 done에 대해 질문드립니다.
0
374
1
안녕하세요 fs 권한 관련 질문드립니다
0
456
1
시퀄라이즈 연결질문...
0
511
2
res.setHeader vs res.cookie
0
1799
3





