Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node_modules
51 changes: 51 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,53 @@
# book-market-be
쩝쩝박사 백엔드 프로젝트

# git clone
$ git clone https://github.com/Prepare-get-to-outside/api.git book-market-be

# express 설치
$ npm i -g express-generator

# express 구성
$ express book-market-be --view=pug

# 프로젝트 npm 설치
$ npm install

# sqlite3 library 설치
$ npm install sqlite -save

# Sequelize 설치(node js에서 사용하는 orm)
$ npm install sequelize -save
https://sequelize.org/v6/

# sequelize CLI(command-line-interface)를 사용하기 위한 패키지 이므로 전역으로 설치
npm install -g sequelize-cli

### sequelize 구조 설치
sequelize init

# sequelize로 DB 테이블 구성
sequelize db:migrate


# express 구조
[bin/www]
http 모듈에 express 모듈을 연결하며, 포트를 지정할 수 있다.
서버를 실행하는 스크립트이다.

public
각종 리소스들을 모아놓은 폴더로 외부(브라우저 등의 클라이언트)에서 접근 가능한 파일들을 모아 둔 디렉토리이다.
images, javascripts, stylesheets 파일들이 들어있다.

routes
라우터들을 관리하는 곳으로 서버의 로직은 모두 routes 폴더 안의 파일에 작성할 것이다. index.js를 기반으로 라우팅 관리를 해주면 된다. routes 디렉토리 안에 또 폴더를 만들어 관리하던지 파일을 만들어 관리하던지 하면 된다. 다만 index.js가 루트가 되게!

view
파일들을 관리하는 곳으로 웹서버로 사용 시 이 디렉토리에 잇는 파일들을 사용해서 렌더링 시킨다.


app.js
대망의 app.js! 핵심적인 서버의 역할을 하며 미들웨어 관리를 하는 곳이다.

# 추후 구조 변경(나중에 하자)
https://github.com/santiq/bulletproof-nodejs/tree/master/src
56 changes: 56 additions & 0 deletions app.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
var createError = require('http-errors'); // 웹 에러 처리
var express = require('express'); // nodejs express 프레임워크
var path = require('path'); // path 경로
var cookieParser = require('cookie-parser'); // cookie 파서
var bodyParser = require('body-parser'); //body 파서
var logger = require('morgan'); // express 로그
// models sequelize 처리
const { sequelize } = require('./models');
// 테이블
sequelize
.sync()
.then(()=>{
console.log(" DB Connection success.");
})
.catch((err) => {
console.error(err);
console.log(" DB Connection error. Please make sure DB is running.");
process.exit();
});

var indexRouter = require('./routes/index'); //routes index.js
var usersRouter = require('./routes/user'); //

var app = express(); // express 선언

// view engine setup
app.set('views', path.join(__dirname, 'views')); // express views
app.set('view engine', 'pug'); // api 서버에서 필요없음

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(bodyParser.json());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', indexRouter);
app.use('/users', usersRouter);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};

// render the error page
res.status(err.status || 500);
res.render('error');
});

module.exports = app;
90 changes: 90 additions & 0 deletions bin/www
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
#!/usr/bin/env node

/**
* Module dependencies.
*/

var app = require('../app');
var debug = require('debug')('book-market-be:server');
var http = require('http');

/**
* Get port from environment and store in Express.
*/

var port = normalizePort(process.env.PORT || '4000');
app.set('port', port);

/**
* Create HTTP server.
*/

var server = http.createServer(app);

/**
* Listen on provided port, on all network interfaces.
*/

server.listen(port);
server.on('error', onError);
server.on('listening', onListening);

/**
* Normalize a port into a number, string, or false.
*/

function normalizePort(val) {
var port = parseInt(val, 10);

if (isNaN(port)) {
// named pipe
return val;
}

if (port >= 0) {
// port number
return port;
}

return false;
}

/**
* Event listener for HTTP server "error" event.
*/

function onError(error) {
if (error.syscall !== 'listen') {
throw error;
}

var bind = typeof port === 'string'
? 'Pipe ' + port
: 'Port ' + port;

// handle specific listen errors with friendly messages
switch (error.code) {
case 'EACCES':
console.error(bind + ' requires elevated privileges');
process.exit(1);
break;
case 'EADDRINUSE':
console.error(bind + ' is already in use');
process.exit(1);
break;
default:
throw error;
}
}

/**
* Event listener for HTTP server "listening" event.
*/

function onListening() {
var addr = server.address();
var bind = typeof addr === 'string'
? 'pipe ' + addr
: 'port ' + addr.port;
debug('Listening on ' + bind);
}
Binary file added book-market-be
Binary file not shown.
10 changes: 10 additions & 0 deletions config/config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"development": {
"storage":"./db/bookmarket.db",
"dialect": "sqlite"
},
"production": {
"storage": "./db/bookmarket.db",
"dialect": "sqlite"
}
}
58 changes: 58 additions & 0 deletions controllers/group.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
const { v1: uuidv1 } = require("uuid");
const db = require("../models");
const User = db.User;
const UserGroup = db.UserGroup;
const GroupMst = db.groupMst;
const Code = db.Code;
const { sequelize } = require("../models");

exports.create = async (req, res) => {
const group = {
grp_cd: req.body.grp_cd,
grp_nm: req.body.grp_nm,
user_cd: req.body.user_cd,
is_mylist: req.body.is_mylist,
};

try {
await sequelize.transaction(async (t) => {
const response = await GroupMst.create(group);

if (response) {
res.send({
status: 200,
data: response.dataValues,
});
}
});
} catch (error) {
return res.status(500).send(error);
}
};

exports.findAll = (req, res) => {
GroupMst.findAll({
include: [
{
model: UserGroup,
include: [
{
model: User,
},
],
},
],
})
.then((data) => {
res.send({
status: 200,
data,
});
})
.catch((err) => {
res.status(500).send({
status: 500,
message: err.message || "에러 났다네",
});
});
};
72 changes: 72 additions & 0 deletions controllers/restInfo.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
const { v1: uuidv1 } = require("uuid");
const db = require("../models");
const RestaurantInfo = db.restInfo;
const GroupInfo = db.groupMst;
const Code = db.code;
const { sequelize } = require("../models");

exports.create = async (req, res) => {
if (!req.body.rest_nm) {
res.status(400).send({
message: "parameter validation error",
});
return;
}

// const rest_cd = uuidv1();

const rest = {
rest_cd: req.body.rest_cd,
rest_nm: req.body.rest_nm,
code: req.body?.code,
};

const groupInfo = {
grp_cd: req.body?.grp_cd,
};
try {
await sequelize.transaction(async (t) => {
let response = await RestaurantInfo.create(rest);

// Code.create(code);

response = await


if (response) {
res.send({
status: 200,
data: response.dataValues,
});
}

});
} catch (error) {
return res.status(500).send({
message: "error: " + error,
});
}
};

exports.findAll = (req, res) => {
RestaurantInfo.findAll({
include: [
{
model: Code,
attributes: ["code", "name"],
},
],
})
.then((data) => {
res.send({
status: 200,
data,
});
})
.catch((err) => {
res.status(500).send({
status: 500,
message: err.message || "에러 났다네",
});
});
};
Loading