Node. js 사용자 정의 경로

6957 단어 Nodejs
소개 하 다.
app. js 파일 에 서 는 경로 에 요청 한 URL 을 자주 사용 합 니 다.
app.use('/index', require('../index.js')) 

프로젝트 가 점점 커지 고 app 엔 드 의 요청 포트 도 여러 버 전 을 교체 하여 v 1.0 에서 v 5.0 으로 업그레이드 되 었 습 니 다.그러면 app. js 가 비대 해 지고 유지 하기 어 려 울 수 있 습 니 다.마지막 까지 app. js 가 이렇게 될 수 있 습 니 다.
app.use('/v1_0/index', require('../index1.js'))
app.use('/v1_1/index', require('../index2.js'))
app.use('/v1_2/index', require('../index3.js'))
...     47 
app.use('/v5_0/index', require('../index50.js'))

그렇다면 이 구 조 를 어떻게 최적화 할 것 인가?Node. js 의 경로 표를 만 들 고 업무 논 리 를 contrller 에 두 며 모든 재 활용 버 전 방법 은 같은 contrller 의 방법 을 가리킨다.
index. js 파일 에서 자주 사용 하 는 구조 가 이 렇 습 니 다.
const express = require('express');
const router = express.Router();

router.get('/', async (req, res, next) => {
    res.render('index');
});

module.exports = router;

app. use () 가 사용 하 는 require ('.. / index 1. js') 를 볼 수 있 습 니 다. 실제로 내 보 낸 router 대상 입 니 다.그러면, 우 리 는 스스로 루트 테이블 규칙 을 정 하고, 루트 대상 의 get / post 등 과정 을 작성 해서, 마지막 으로 이 루트 를 app. js 에 내 보 낼 수 있 습 니까?
1. 라 우 터 루트 테이블 작성
router. js 를 routers 디 렉 터 리 에 만 듭 니 다.
'use strict';
/**
 *        
 * Created by davidqin on 2017/11/1.
 */

module.exports = {

  /**
   * admin  
   */
  '/admin': {},
  /**
   *       
   *     :/operation/post_article/categories-add
   *     :post
   *      :article_controller
   *         :addCategories
   */
  '/operation': {
    '/post_article':[
      '/categories-add.post.article_controller.addCategories',
      '/categories-list.get.article_controller.getCategories',
      '/categories-delete.delete.article_controller.deleteCategories',
      '/categories-edit.put.article_controller.editCategories',
      '/author-add.post.article_controller.addAuthor',
      '/author-delete.delete.article_controller.deleteAuthor',
      '/author-edit.put.article_controller.editAuthor',
      '/author-password.put.article_controller.editAuthorPassword',
      '/author-fetch.get.article_controller.fetchAuthor',
      '/author-list.get.article_controller.listAuthor',
      '/articles-list.get.article_controller.listArticles',
      '/article-detail.get.article_controller.detailArticle',
      '/article-add.post.article_controller.addArticle',
      '/article-edit.put.article_controller.editArticle',
      '/article-delete.delete.article_controller.deleteArticle',
    ],
    '/article_comment':[
      '/list.get.article_comment_controller.listComments',
      '/add.post.article_comment_controller.addComment',
      '/delete.delete.article_comment_controller.deleteComment'
    ]
  },

  /**
   * APP v1.1 API  
   */
  '/v1_1':{
    '/wikis':[
      '/list.post.article_controller.listArticles',
      '/detail.post.article_controller.detailArticle'
    ],
    '/wiki-comment':[
      '/add.post.article_comment_controller.addComment',
      '/list.get.article_comment_controller.listComments',
      '/delete.post.article_comment_controller.deleteComment'
    ],
    '/timeday':[
      '/list.get.timeday_controller.listTimeday',
      '/delete.post.timeday_controller.deleteTimeday',
      '/add.post.timeday_controller.addTimeday'
    ]
  }
};

2. 루트 테이블 분석
루트 테이블 을 만 든 후 가장 중요 한 것 은 루트 테이블 의 정 보 를 어떻게 해석 하고 루트 대상 에 게 사용 하 는 지 입 니 다.최종 적 으로 router 대상 을 내 보 냅 니 다.
생 성 routermap. js 는 routers 디 렉 터 리 에 있 습 니 다.
'use strict';
/**
 *          ,require controller   -  
 * Created by davidqin on 2017/11/1.
 */
const router = require('express').Router();
const routerTable = require('./router');
const _ = require('lodash');

(function loop(map) {
  _.forEach(map, function (value, key) {
    let controller1;
    controller1 = key;
    _.forEach(value, function (value2, key2) {
      let controller2 = controller1;
      controller2 += key2;
      for (var i = 0; i < value2.length; i++) {
        let controller3 = controller2;
        let value3 = value2[i];

        let arr = value3.split('.');
        controller3 += arr[0];
        let method = arr[1];
        let path = '../controllers/' + arr[2] + '.js';
        let fuc = arr[3];

        let controllerRegistry = require(path);
        let action;
        for (let actionChild in controllerRegistry) {
          if (actionChild === fuc) {
            action = actionChild;
          }
        }
        console.log(method, controller3, action);
        router[method](controller3,controllerRegistry[action]);
      }
    });
  });
}(routerTable));

module.exports = router;

인쇄 된 결 과 는 다음 과 같 습 니 다.
post /operation/post_article/categories-add addCategories
get /operation/post_article/categories-list getCategories
delete /operation/post_article/categories-delete deleteCategories
put /operation/post_article/categories-edit editCategories
post /operation/post_article/author-add addAuthor
delete /operation/post_article/author-delete deleteAuthor
put /operation/post_article/author-edit editAuthor
put /operation/post_article/author-password editAuthorPassword
get /operation/post_article/author-fetch fetchAuthor
get /operation/post_article/author-list listAuthor
get /operation/post_article/articles-list listArticles
get /operation/post_article/article-detail detailArticle
post /operation/post_article/article-add addArticle
put /operation/post_article/article-edit editArticle
delete /operation/post_article/article-delete deleteArticle
get /operation/article_comment/list listComments
post /operation/article_comment/add addComment
delete /operation/article_comment/delete deleteComment
post /v1_1/wikis/list listArticles
post /v1_1/wikis/detail detailArticle
post /v1_1/wiki-comment/add addComment
get /v1_1/wiki-comment/list listComments
post /v1_1/wiki-comment/delete deleteComment
get /v1_1/timeday/list listTimeday
post /v1_1/timeday/delete deleteTimeday
post /v1_1/timeday/add addTimeday

세 번 째 매개 변 수 는 방법 명 입 니 다.routers 폴 더 동급 디 렉 터 리 에 controllers 폴 더 를 만 들 고 articlecontroller. js (루트 테이블 의 컨트롤 러 이름과 일치 함).
3. 컨트롤 러 작성
article 생 성controller. js, controllers 디 렉 터 리 에 있 습 니 다.
exports.addCategories = async (req, res, next) =>{
    res.send("1");
}

요청 이 있 으 면 post / operation / postarticle / categories - add 시 이 방법 에 들 어 갑 니 다.루트 테이블 에서 정의 하기 만 하면 여러 요청 URL 에서 이 방법 을 가리 킬 수 있 습 니 다.
4. app. js 에서 참조
const router_map = require('./server/routes/router_map');

app.use('/',router_map);

해결 하 다.

좋은 웹페이지 즐겨찾기