728x90
반응형
index.js
const express = require('express');
const Sequelize = require('sequelize');
const env = process.env.NODE_ENV || 'development';
const config = require(__dirname + '/config/config')[env];
const sequelize = new Sequelize(config.database, config.username, config.password, config);
const user = require('./user')(sequelize, Sequelize.DataTypes);
const app = express();
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.set('port', process.env.PORT || 3000);
const session = require('express-session');
app.use(session({
secret: 'jwcs',
resave: false,
saveUnionitialized: true,
cookie: { secure: false }
}));
sequelize.sync({ force: false })
.then(() => {
console.log('데이터베이스 연결 성공');
})
.catch((err) => {
console.error(err);
})
app.get('/', (req, res) => {
res.sendFile(__dirname + '/signup.html');
});
app.post('/signup', (req, res) => {
user.findOne({
where: {
username: req.body.username,
},
})
.then(alreadyAccount => {
if (alreadyAccount) {
res.send('이미 계정이 있습니다');
}
else {
user.create({
username: req.body.username,
password: req.body.password,
})
.then(success => {
res.sendFile(__dirname + '/login.html');
})
.catch(error => {
res.send('error');
})
}
})
});
app.post('/login', (req, res) => {
user.findOne({
where: {
username: req.body.username,
password: req.body.password,
}
})
.then(success => {
if (success) {
req.session.username = req.body.username;
res.send(req.session.username);
}
else {
res.send('아이디를 찾을 수 없습니다');
}
})
.catch(error => {
res.send('error');
})
});
app.listen(app.get('port'), () => {
console.log(app.get('port'), '번 포트에서 대기 중');
});
user.js
const { Model, DataTypes } = require('sequelize');
const Sequelize = require('sequelize');
const env = process.env.NODE_ENV || 'development';
const config = require(__dirname + '/config/config')[env];
const sequelize = new Sequelize(config.database, config.username, config.password, config);
class user extends Model {
static init(sequelize) {
super.init({
username: {
type: DataTypes.STRING,
allowNull: false
},
password: {
type: DataTypes.STRING,
allowNull: false
}
}, {
sequelize,
modelName: 'user',
tableName: 'user'
})
}
};
module.exports = () => {
user.init(sequelize);
return user;
};
login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>login</title>
</head>
<body>
로그인<br>
<form action="/login" method="post">
아이디 <input type="text" name="username"><br>
비밀번호 <input type="text" name="password"><br>
<input type="submit">
</form>
</body>
</html>
signup.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>signup</title>
</head>
<body>
회원가입<br>
<form action="/signup" method="post">
아이디 <input type="text" name="username"><br>
비밀번호 <input type="text" name="password"><br>
<input type="submit">
</form>
</body>
</html>
첫 페이지는 회원가입 페이지로 구성했다.
이미 존재하는 아이디 입력시 `이미 계정이 있습니다`라는 문구를 보내도록 설정했다.
이런 식으로 구현했다.
존재하지 않는 아이디 입력시 데이터베이스에 해당 계정을 추가하고 로그인 페이지를 띄우도록 설계했다
signup에 대한 전체 구성이다
존재하지 않는 아이디로 로그인 시도했을 경우, 아이디를 찾을 수 없다는 문자열을 보낸다
존재하는 아이디로 로그인을 했을 경우 해당 아이디를 출력하고, 세션을 설정한다
이런 식으로 구성했다
728x90
반응형
'개발' 카테고리의 다른 글
[MySQL] 챕터 3. MySQL 전체 운영 실습 (1) | 2024.02.28 |
---|---|
[MySQL] 챕터 1. DBMS 개요와 MySQL 소개 (1) | 2024.02.26 |
[Node.js] 8장 (0) | 2024.02.16 |
[Node.js] 7장 (0) | 2024.02.16 |
[Node.js] 1~6장 복습 (0) | 2024.02.15 |