codingeverybody / codingyahac

https://coding.yah.ac
292 stars 50 forks source link

[Node.js] 새로고침을 하거나 다른페이지로 갈때 자꾸 서버가 재시작됩니다. #437

Closed delivan closed 6 years ago

delivan commented 6 years ago

해결하고자 하는 문제

생활코딩의 nodejs-express-passportjs 강의를 들으면서 개인 프로젝트를 진행중 인데요. pm2를 이용하다가 지금은 nodemon을 이용해서 서버를 실행시켜 놓고 있습니다.
어느순간부터인지 모르겠지만 제 웹사이트가 새로고침이나 링크로 다른 페이지로 갈때마다 서버가 재시작 됩니다. 구글링해봐도 원인을 알수 없어서 이렇게 질문드립니다!

코드

var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var compression = require('compression');
var session = require('express-session');
var FileStore = require('session-file-store')(session);

app.use(express.static('public'));
app.use(compression());
app.post('*', bodyParser.urlencoded({ extended: false }));
app.use(session({
  HttpOnly: true,
  secret: 'keyboard cat',
  resave: false,
  saveUninitialized: true,
  store: new FileStore(),
}));

var passport = require('passport')
  , LocalStrategy = require('passport-local').Strategy;

app.use(passport.initialize());
app.use(passport.session());

var authData = {
  id: "hyuk",
  pwd: "111"
}

passport.serializeUser(function(user, done) {
  console.log(user);
  done(null, user.id);
});

passport.deserializeUser(function(id, done) {
  done(null, authData);
});

passport.use(new LocalStrategy({
  usernameField: 'id',
  passwordField: 'pwd'
},
function(id, pwd, done) {
  if (id === authData.id) {
    if (pwd === authData.pwd) {
      return done(null, authData);
    } 
    else {
      return done(null, false, { message: 'Incorrect password.' });
    }
  }
  else {
    return done(null, false, { message: 'Incorrect id.' });
  }
}
));

app.post('/auth/login_process', passport.authenticate('local', { 
  successRedirect: '/', 
  failureRedirect: '/auth/login' 
}));

var indexRouter = require('./routes/index');
var cardRouter = require('./routes/card');
var authRouter = require('./routes/auth');

app.use('/', indexRouter);
app.use('/auth', authRouter);
app.use('/card', cardRouter);

app.use(function(req, res, next) {
  res.status(404).send('Sorry cant find that!');
});

app.use(function (err, req, res, next) {
  console.error(err.stack)
  res.status(500).send('Something broke!')
});

app.listen(3000, function () {
  console.log('Example app listening on port 3000!');
});

오류

[nodemon] 1.18.3
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: *.*
[nodemon] starting `node app.js`
Example app listening on port 3000!
Executing (default): SELECT `id`, `front`, `back`, `created` FROM `cards` AS `Cards`;
[nodemon] restarting due to changes...
[nodemon] starting `node app.js`
Example app listening on port 3000!
Executing (default): SELECT `id`, `front`, `back`, `created` FROM `cards` AS `Cards`;
[nodemon] restarting due to changes...
[nodemon] starting `node app.js`
Example app listening on port 3000!
Executing (default): SELECT `id`, `front`, `back`, `created` FROM `cards` AS `Cards`;

환경

Mac OS, Javascript, Nodejs v9.10.1, Express v4.16.3

egoing commented 6 years ago

제가 수업에서 언급을 안해서 그렇네요 ㅠㅠ

pm2가 세션 같은 부분에 수정이 있을 때도 리로드를 해서 그렇습니다.

pm2 기준 아래와 같이 하시면 됩니다. pm2 start main.js --watch --ignore-watch="sessions/* db.json data/*"

위와 같이 하시면 sessions, db.json, data 디렉토리에 변경이 생겼을 때는 리스타트를 하지 않습니다.

delivan commented 6 years ago

답변 감사합니다! 어렴풋이 세션때문인가 했는데 좀 더 파보면 될 것이었네요ㅎㅎㅠㅠ 참고로 nodemon은 nodemon main.js --ignore sessions/* 입니다!