아무튼 개발
article thumbnail
반응형

 

Node.js에서 Express 서버를 연결하고, DB를 연동하며, 라우터 함수를 생성하기 위해

각각의 기능별로 파일을 분리하는 코딩을 알아보겠다.

 

게시판 만들기, 채팅 만들기 등 여러 기능을 만들 때 항상 필수적으로 있어야 하기 때문에

일일이 모든 글에 쓰지 않고 이렇게 따로 글을 작성하기로 하였다.

 

그럼 바로 살펴보자!

 

 


 

서버 연결 - app.js

require("dotenv").config();
var express = require("express");
var http = require("http");
var path = require("path"); 
var serveStatic = require("serve-static");
var expressErrorHandler = require("express-error-handler");

var config = require("./config");
var database = require("./database/database");
var routerLoader = require("./router/routerLoader");

var app = express();

app.set("port",process.env.PORT||config.serverPort);

app.use(express.urlencoded({extended:false}));

app.use("/public",serveStatic(path.join(__dirname,"public")));

//----------------------------------
var router = express.Router();

routerLoader.init(app,router);

var errorHandler = expressErrorHandler({
	
	static: {
		"404":"./public/404.html"
	}	
});

app.use(expressErrorHandler.httpError(404));
app.use(errorHandler);

http.createServer(app).listen(app.get("port"),function(){	
	console.log("익스프레스 서버 시작: " + app.get("port"));	
	database.init(app,config);
});

 

분리할 파일들을 모두 담아놓은 곳이다.

 

먼저 밑에 나올 config, database, routerLoader 파일들을 불러오기 위해 외부 모듈을 등록해주었다.

 

그리고 app에 익스프레스 객체를 설정해주었다.

서버 포트도 가져오며 config.serverPort는 밑의 config파일에 입력된 값으로 포트번호를 넣어줄 수 있다.

public은 사용할 파일들을 연결하기 위해 웹페이지 경로 창에 /public을 입력하면 연결하도록 해준다.

 

express.Router();는 라우터 객체를 생성한다.

그 다음 routerLoader라는 파일에 init 함수를 통해 라우팅 처리를 할 것이다.

 

expressErrorHandler는 에러 처리를 해주기 위함이다.

404.html이라는 파일에 에러가 났을 때 뜨는 화면을 입력해주었기에 해당 파일로 연결시켰다.

 

마지막으로 Express 서버 시작을 해주면서

database 파일의 init함수를 호출하여 그 안의 내용을 가져올 것이다. (마찬가지로 밑에 내용 o)

 

 

이제 위에서 언급한 순서대로 파일들을 알아보겠다.

 

config.js

module.exports = {
		
		serverPort:3000,
		dbUrl:"mongodb://localhost:27017/shopping"
		
		dbSchemas:[
		    {file:"./coffeeshopSchema",collection:"starbucks",schemaName:"CoffeeShopSchema", modelName:"CoffeeShopModel"}		           
		],
		
		routeInfo:[
		    {file:"./coffeeShop",path:"/process/addCoffeeShop",method:"add",type:"post"},
		    {file:"./coffeeShop",path:"/process/listCoffeeShop",method:"list",type:"post"},
		    {file:"./coffeeShop",path:"/process/nearCoffeeShop",method:"findNear",type:"post"}	
		]		
}

 

app파일에서 보았던 서버 포트가 입력되어있다.

또한 db연결을 할 수 있도록 url을 적어주었으며

 

스키마 연결을 위해 coffeeshopSchema라는 파일에 어떤 컬렉션과 스키마, 모델을 지정할 것인지 입력해준다.

입력한 순서는 상관없다.

 

routeInfo는 웹페이지 경로에 어떤 방식으로 path가 왔을 때 어떤 파일, 메서드를 연결해줄지 지정한다.

 

 

여기서 추가로 coffeeshop파일과 관련된 예제를 확인해보고 싶다면

Node.js 카테고리의 위치기반 서비스 예제 글을 읽어보면 된다.

 

 

라우팅 처리 - routerLoader

var config = require("../config");

var routerLoader = {};

routerLoader.init = function(app,router){
		
	return initRouters(app,router);	
}

function initRouters(app,router){
	
	var infoLen = config.routeInfo.length;
	
	for(var i=0;i<infoLen;i++){
		
		var curItem = config.routeInfo[i];
		
		var curModule = require(curItem.file);
		
		if(curItem.type=='get'){
			router.route(curItem.path).get(curModule[curItem.method]);
			
		}else if(curItem.type=='post'){
			router.route(curItem.path).post(curModule[curItem.method]);
            
		}else{
			router.route(curItem.path).post(curModule[curItem.method]);
		}		
	}
		
	app.use("/",router); 
}

module.exports = routerLoader;

 

config 파일의 내용을 가져오기 위해 외부 모듈 등록을 먼저 해주었다.

 

routerLoader 객체에 init 변수(함수)를 만들어 initRouters 함수가 실행되도록 하였다.

 

initRouters 함수를 살펴보자.

config 파일의 routeInfo의 내용을 가져올 것이다.

라우팅 처리를 위해 if 조건을 통해 'get' 방식 또는 'post' 방식으로 오는 기준을 나누었다.

쉽게 말해, router.route("/process/login").get(user.login); 이 코딩을 여러 변수들로 쪼개서 입력했다고 보면 된다.

 

라우팅 모듈을 설정하고 나서 라우팅 객체를 등록해주고

외부 모듈로 사용될 수 있도록 exports를 입력해준다.

 

 

데이터베이스 연결 - database.js

var mongoose = require("mongoose");

var database = {};

database.init = function(app,config){	
	connect(app,config);
}

function connect(app,config){
		
	mongoose.connect(config.dbUrl);
	
	database = mongoose.connection;
	
	database.on("open",function(){				
		createSchema(app,config);
	});
	
	database.on("error",console.error.bind(console,"몽구스 연결 에러..."));
	
	database.on("disconnected",function(){		
		setInterval(connect(),5000);
	});	
}

function createSchema(app,config){
	
	var schemaLen = config.dbSchemas.length;
	
	for(var i=0;i<schemaLen;i++){
		
		var curItem = config.dbSchemas[i];		
		var curSchema = require(curItem.file).createSchema(mongoose);		
		var curModel = mongoose.model(curItem.collection, curSchema);
		
		database[curItem.schemaName] = curSchema;
		database[curItem.modelName] = curModel;
	}
	
	app.set("database",database);
}

module.exports = database;

 

데이터베이스 연동을 하기 위한 코딩이다. 해당 파일에는 db,schema,model을 담을 것이다.

몽구스를 사용하므로 등록해주었다.

 

app 파일에서 database.init을 호출할 때 들어오는 매개변수로 connect 함수에 넣어준다.

따라서 config는 app 파일에 외부 모듈 등록돼있으므로 해당 파일에선 따로 안 불러도 따라 들어온다.

 

그럼 connect 함수를 알아보겠다.

먼저 몽구스 연결을 해주고

데이터베이스가 실행될 때 createSchema 함수를 호출할 것이다. createSchema 함수는 밑에서 다시 알아보겠다.

그리고 에러가 났을 때는 콘솔창에 문자가 뜨게 하며

데이터베이스 연결이 끊겼을 때는 setInterval 메서드를 통해 5초마다 DB가 연결되도록 connect함수를 다시 호출한다.

 

 마지막으로 외부에서 database를 호출하도록 exports를 입력해준다.

 

 


기준은 app.js 파일이므로 Run as도 app 파일에서 실행하면 된다.

이후 위의 코딩을 사용한 예제는 위치기반 서비스 글에서 이어지니 참고 바란다.

 

 

또한 위의 내용과 관련해서 추가 글이 필요하다면 하단의 글을 참고해도 좋을 것 같다.

에러 처리 역시 아래의 내용에 포함되어 있다.

 

https://realzzu.tistory.com/75?category=1014823 

 

[Node] Express 설치&서버 연결 / post 데이터 및 오류페이지(404) 출력

Express는 Node.js의 Web 어플리케이션을 위한 프레임워크이다. Express는 노드 서버에 모듈을 설치하여 간단하게 사용할 수 있다. Express 설치 설치는 따로 다운받을 필요가 없이 입력만 해주면 된다. cm

realzzu.tistory.com

 

반응형
profile

아무튼 개발

@릴쥬

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

profile on loading

Loading...