node.js 프로젝트 구조는 어떤 모습이어야 합니까?

소개



이 기사에서는 구조화된 방식으로 node.js 프로젝트를 구성하는 방법에 대해 설명합니다.



체계적인 프로젝트 구조는 버그와 섬세함을 줄이고 코드의 안정성과 확장성을 높입니다.

구조




|--app.js
|--api-routes
|--config
|--data
|--jobs
|--loaders
|--node_modules
|--public
|--secrets
|--services
|--views
|--package-lock.json
|--package.json


1. 앱.js



app.js는 node.js 애플리케이션의 진입점 또는 핵심입니다.

//app.js
const express = require('express');
const app     = express();

require('./loaders/network-information.js');
require('./api-routes/home.js')(app);
require('./jobs/say-hello.js');
var config = require('./config/config.js');

app.set('view engine', 'ejs');
app.use(express.static('public'))

app.listen(config.port, () => {
  console.log(`App listening at http://localhost:${config.port}`);
})


2. API 경로



api-routes에는 사용자가 애플리케이션과 상호 작용하는 데 도움이 되는 URL 엔드포인트가 포함되어 있습니다.

|--api-routes
   |--home.js



//home.js
var analytics = require('../services/analytics.js');
module.exports = function(app, network_information){    
    app.get('/', function(req, res){
        res.render('home.ejs', {key: "You have visited this page "+analytics.visitCounter()+" times"});
    });    
}


3. 구성



이 폴더에는 응용 프로그램의 매개 변수 및 초기 설정을 구성하는 데 사용되는 파일이 포함되어 있습니다. 환경 변수, 명령줄 매개변수 또는 외부 소스에 의해 재정의 및 확장될 수 있습니다.

|--config
   |--config.js



//config.js
module.exports = {    
    port: process.env.PORT || 80
};


4. 데이터



여기에서 작은 데이터를 저장하거나 로컬 데이터베이스로 사용할 수 있습니다.
참고: 여기에 민감하거나 기밀 데이터를 저장하지 마십시오. 이러한 종류의 데이터에는 항상 보안 데이터베이스를 사용하십시오.

|--data
   |--users.json



//users.json
[
    {
        "name": "Mario Curtis",
        "city": "San Francisco",
        "contact number": "4949494949780",
        "type": "Admin"        
    }
]


5. 직업



작업 폴더에는 특정 시간에 자동으로 실행되는 스크립트가 포함되어 있습니다.
여기에서 하루에 매시간 "Hello"를 인쇄하는 스크립트를 만들었습니다.

|--jobs
  |--say-hello.js



//say-hello.js
var schedule = require('node-schedule');     

schedule.scheduleJob('00 * * * *', function(){
    console.log('Hello World, This scheduler will say "Hello" every hour to you');
});


6. 로더



로더에는 서버가 시작될 때 실행할 스크립트 유형이 포함됩니다.
마찬가지로 서버가 시작될 때마다 사용자의 IP 주소를 가져옵니다.

|--loaders
   |--network-information.js



//network-information.js
const http = require('http');

http.get('http://api.ipify.org?format=json', (resp) => {
  let data = '';

  resp.on('data', (chunk) => {
    data += chunk;    
  });

  resp.on('end', () => {    
    console.log("Your IP address is "+JSON.parse(data).ip)
  });

}).on("error", (err) => {
  console.log("Error: " + err.message);
});


7. 공개



public 폴더에는 "정적으로"제공되어야 하는 모든 파일(JS, CSS, 이미지 파일)이 포함되어 있습니다.

|--public
   |--css
   |  |--home.css
   |--js
   |  |--home.js



//home.css
body{
    background-color: #f3f7fa;
}

div{
    text-align: center;
    padding-top: 200px;    
}



console.log('Hello from javascript');


8. 비밀



API-KEY, AUTHENTICATION-KEY 등 웹 애플리케이션과 관련된 모든 비밀을 저장할 수 있습니다.

|--secrets
   |--keys.json



//keys.json
{
    "api-key": "HUH121NVYTB091BHHBCR121DR"
}


9. 서비스



서비스에는 특정 작업을 수행하는 모듈 집합이 포함되어 있습니다. 반복해서 사용할 수 있습니다.

|--services
   |--anaytics.json



//analytics.json
var i = 0;
function visitCounter()
{
    i = i + 1;
    return i;
}

module.exports = {
    visitCounter: visitCounter
}


10. 조회수



여기에는 나중에 템플릿 엔진에 의해 "동적으로"렌더링되고 사용자에게 HTML 응답을 제공하는 HTML 템플릿 파일이 포함됩니다.
여기에서는 EJS 템플릿 엔진을 사용하고 있습니다. 사용자의 편의에 따라 템플릿 엔진(pug, ejs)을 사용할 수 있습니다.

|--views
   |--home.ejs



//home.ejs
<html>
    <head>
        <title>Node.js Project Structure</title>
        <link rel="stylesheet" href="/css/home.css"/>
    </head>
    <body>
        <div><%= key %></div>
    </body>
    <script src="/js/home.js"></script>
</html>


결론



정리된 폴더 구조는 코드 복잡성을 줄이고 애플리케이션의 확장성을 높입니다.

GitHub에서 전체 프로젝트를 찾을 수 있습니다.

더 많은 업데이트를 보려면 나를 팔로우하거나 GitHub .

좋은 웹페이지 즐겨찾기