sourcetip

NodeJS 앱 구조(전체 자바스크립트 스택)에 대해 명확하게 알고 싶습니다.

fileupload 2023. 6. 22. 22:08
반응형

NodeJS 앱 구조(전체 자바스크립트 스택)에 대해 명확하게 알고 싶습니다.

일반적인 NodeJS 앱의 구조를 알고 싶습니다. 프로젝트를 더 많이 읽고 볼수록 특히 다음과 같은 질문(또는 이 질문을 업데이트한 후 더 많이)에 대해 혼란스러워하기 때문입니다.

  1. MEAN 스택을 예로 들어보겠습니다. 제가 알기로는 NodeJS와 Express가 서버 부분을 관리하고 서버 인터페이스를 제공하는 등의 작업을 수행하는 것으로 알고 있습니다.MongoDB와 Angular는 매우 간단합니다.

    하지만 비즈니스 논리는 어디로 가야 합니까?내게 있으면 말해줘요.controller.js하고, 함를포는것하함, 고리그는route.js파일이 이 컨트롤러 함수로 요청을 바인딩합니다.제 질문은: 이 파일들이 어느 모듈에 속하는지/어떤 모듈에서 실행되는지입니다(Express 또는 NodeJS?).

  2. NodeJS 앱의 시작점은 어디입니까?말합니다index.phpPHP 앱의 시작점이지만, NodeJS 앱은 어디에 있습니까?에 모프 Nodejs 로다음라는 을 알 수 .server.js또는app.js(같, 것포니다합함을은다같니▁something) 같은 것을 .module.exports = app;하지만 NodeJS가 어떤 파일을 찾아서 실행할지 어떻게 알 수 있습니까?

저는 NodeJS, Express, sufficialize.js/Mongoose, Jade/EJS의 신입이지만 NodeJS 프로젝트를 시작하고 싶습니다.각 모듈이 제공하는 실제 기능과 전체 JS 스택 NodeJS 앱의 일반적인 구조에 대한 일반적인 소개에 대해 자세히 설명해 주시겠습니까?잘 부탁드립니다!

좋아요, 이건 꽤 광범위한 질문이고 저는 확실히 전문가는 아니지만, 여기서 최선을 다하겠습니다.

TL;DR

  • routes가 앱할 때 입니다. 여기에는 와 해당 됩니다. 여기에는 렌더링할 뷰와 해당 뷰로 보낼 데이터가 포함됩니다.
  • models과 같습니다.
  • module.exports =는 파일에 정확히 무엇을 "실행"하는지, 즉 기본 앱 파일에서 코드를 실행하거나 액세스할 수 있어야 하는지를 알려줍니다.
  • require(..)에는 모듈이 포함되어 있습니다.나중에 할 수 할 수 . 또는 단순히 함수를 실행할 수 있습니다.module.exports돌아온다.

이러한 기술을 결합하면 모든 애플리케이션에 대한 견고한 프레임워크를 확정하는 데 도움이 될 수 있습니다.


긴 대답

Express는 Node.js 응용프로그램을 구성하기 위한 견고한 프레임워크를 제공합니다.노드는 익스프레스와 완전히 독립적이지만 익스프레스의 인기 때문에 사실상 손을 맞잡습니다.설치가 완료되면 Express를 사용하여 원하는 경우 위에 빌드할 수 있는 비계 웹 프로젝트(옵션 포함)를 생성할 수 있습니다.

컨트롤러

생성된 프로젝트는 다음을 생성합니다./routes/index.js(MVC를 이해하는 경우) 기본적으로 메인 컨트롤러입니다.급행의 경로는 다음과 같이 기록됩니다.

app.get('/path', function(req, res, next){ .. } );

이에 대해 자세히 설명하겠습니다. 애플리케이션 변수(앱)는 GET 요청에 따라 다음과 같은 작업을 수행할 수 있습니다.'/path'익다콜명실행하로 익명 합니다.req, res, next변수(각각 요청, 응답, 콜백).저는 이것을 사용자 지정 이벤트 핸들러처럼 생각하는 것이 도움이 된다고 생각합니다.

이 시점에서 우리가 또한 전화할 수 있다는 것을 주목하는 것이 중요합니다.app.postgets와 .

익명 콜백 내에서 수신 데이터를 처리하고 사용자를 위한 뷰를 렌더링합니다.제 비즈니스 로직의 대부분은 여기서 끝납니다. 따라서 익명 기능을 사용하지 않는 것이 좋습니다.다음은 홈페이지를 표시하는 기본 콜백의 예입니다.

app.get('/', function(req, res, next){

    //some business logic

    res.render('views/home');
});

우리 할 때 (사용자가)/), 우리의 것을 home우리 프로젝트의 뿌리로부터, 그것이 저장되는 것을 봅니다.views폴더를 누릅니다.

하지만 우리가 이것을 모듈화해서 우리의 모든 노선을 우리의 주요 노선에 선언하지 않기를 원한다면 어떨까요?app.js또는server.js?

우리는 사용합니다.module.exports = ..모듈에서 서버에 정확히 무엇을 포함해야 하는지 알려줍니다.컨트롤러에서 응용 프로그램을 인수로 사용하고 경로를 다음과 같이 정의하는 단일 함수를 내보냅니다.

컨트롤러/User.js

 module.exports = function(app){

    app.get('/users', function(req, res){
        var users = req.db.collection('users').find();
        if (!users) {
            console.log("no users found");
            res.redirect('/');
        } else {
            res.render('users/index', {users : users});
        }
    });

};

걱정하지 마세요.req.db코드, 응용프로그램의 요청에 데이터베이스를 첨부하지만 기본적으로 그렇지 않습니다.여기서 '사용자' 목록을 가져오고, 앱의 인덱스가 없으면 사용자를 리디렉션한다는 것을 이해하십시오.

모델

Mongoose는 모델 작성을 위한 훌륭한 인터페이스를 제공합니다.mongoose를 사용하는 경우 모델 작성은 3단계 프로세스입니다.

  • 스키마 정의
  • 모델 로직 정의
  • 모델 생성 및 내보내기

에 다은예다니의 .User측정 결과:

모델/User.js

var mongoose = require('mongoose'),
    userSchema = new mongoose.Schema({

        name: { type: String, required: true },
        joinDate: {type: Date, default: date.now }

    }),
    User = mongoose.model('user', userSchema);

module.exports = user;

서버 앱

module.exports코드베이스에 대한 모듈화를 정의하는 데 사용됩니다.노드 애플리케이션을 실행할 때, 우리는 궁극적으로 단일 자바스크립트 파일을 실행하게 됩니다(이미 이 파일을 사용하여 확인했습니다).server.js또는app.js).

경로로 이이 너무 여러모및경서이에너파커것무지다방위사니다용합해음을기지을하는델일이로▁to▁from를 합니다.require(module)다른 JS 파일의 코드를 포함합니다. module우리의 경우에는 우리가 필요로 하는 모듈로 가는 경로가 될 것입니다.다음 문서 구조를 가진 경우:

| Controllers
    - User.js
| Models
    - User.js
| Views
app.js

사용자 컨트롤러를 포함하려면 다음과 같이 하십시오.app.js당신은 다음과 같이 적을 것입니다.require('./Controllers/User')컨트롤러 모듈은 단순히 함수를 내보내기 때문에 마지막에 괄호를 추가하기만 하면(필요한 매개 변수가 무엇이든) require 문 바로 뒤에 해당 함수를 호출할 수 있습니다.컨트롤러를 포함하면 다음과 같습니다.

require('./Controllers/User')(app)

제 모듈(아래)이 단순히 제 앱의 경로에 비즈니스 로직을 추가하는 기능을 내보내기 때문에 실제 앱을 전달합니다.이 옵션은 호출만 하면 되고 절대 사용하지 않기 때문에 컨트롤러를 나중에 메서드를 호출할 변수로 캡처하지 않습니다.

모델을 포함하는 것은 모델이 정의한 일부 작업을 수행하기를 원할 수 있기 때문에 약간 다릅니다.요구 코드를 조금만 변경하면 이 작업을 수행할 수 있습니다.

var User = require('./Models/User');

이제 언제든지 사용자 모델의 메서드를 호출할 수 있습니다.Mongoose는 많은 기본 기능을 무료로 제공합니다.

User.find({}, function(err, users){ .. });

위의 함수는 모든 사용자를 찾은 다음 잠재력이 있는 익명 함수를 실행합니다.err(문제가 없으면 null입니다.) 그런 다음 JSON 형식의 사용자 목록을 표시합니다.꽤나 멋진.

이러한 모든 개념을 결합하면 Express 및 Node.js를 사용하여 기본 웹 응용프로그램을 만들 수 있습니다.제가 익스프레스를 사용하는 방법에 대해 명확하게 설명할 수 있는 것이 있다면 댓글로 알려주세요.이것은 매우 표면적인 지식이며, 저는 당신의 앱의 기능을 확장하기 위해 문서를 파고들고 플러그인을 검토하는 것을 제안합니다.행운을 빕니다.

언급URL : https://stackoverflow.com/questions/21831119/want-to-get-crystal-clear-about-nodejs-app-structure-full-javascript-stack

반응형