2017-12-02 3 views
3

Node.js 및 Express로 첫 번째 앱을 작성했지만 라우터 파일이 복잡해졌습니다. 내 의견으로는, 그것은 너무 많은 논리를 포함하고 있습니다.Express 라우터에서 로직을 분리하고 Express 기능에 계속 액세스

내 논리를 익명 함수에 넣는 대신 다른 파일 (Parent.controller.js)의 함수를 라우터로 전달하려고합니다. 이 같은

,이보다는

Router.post('/create-child', Parent.createChild);

:

Router.post('/create-child', function(req, res, next) { 
    // do something 
    // do something else 
    // do even more stuff 
    // this is getting messy 
    // oh dear 
}); 

하지만 Parent.controller.js에서 함수에서 리디렉션을 유발, 또는 플래시 데이터를 저장하는 방법을 모른다 . 이는 req, res 개체에 Parent.controller.js에서 액세스하는 방법을 잘 모르니까요. 어떤 제안이라도 기꺼이 받아 들여질 것입니다.

답변

2

reqres은 컨트롤러 기능에 인수로 전달되는 일반적인 개체입니다. Parent.controller.js에 특별한 내용이 필요하지 않습니다. createChild의 매개 변수가 req, res인지 확인하십시오. 그리고 필요한 경우 next. 당신은 물론, 경로 파일에 명시 필요로 할 것이다

module.exports.createChild = (req, res, next) => { 
    res.status(200).json({ message: 'OK' }); 
} 

: 그래서 같이

const express = require('express'); 
const Parent = require('Parent.controller'); 

const router = express.Router(); 

Router.post('/create-child', Parent.createChild); 
1

정확히 무엇을 시도하셨습니까? req,res에 액세스하면, 당신은 다른 페이지로 사용자를 리디렉션하려는 경우, 그러나, res.redirect()로를 트리거 할 수 있습니다, 리디렉션 당으로

(module.exports.)createChild = function(req,res){ 
    childName = req.child_name; 
    .......... 
    your child genesis code 
    ..... 
    res.send('Child created') 
} 

매우 간단합니다 나는 당신에게 그런 res.status(307).send 또는 뭔가를 권 해드립니다 프런트 엔드는 상태 코드를 catch하여 window.assign() 또는 이와 유사한 것을 트리거합니다.

2

당신은 개체의 모든 기능을 싸서과 같이 내보낼 수 있습니다 -

function createChild(req, res, next) { 
    // do your thing here 
} 

// Add more functions 

// Export module 

module.exports = { 
    createChild, 
    ... // other functions 
} 

는 다음과 같이 라우터를 추가 Parent.controller.js -

const Parent = require('./Parent.controller.js'); 

Router.post('/create-child', Parent.createChild); 

아니면 클래스 경로를 갈 수 있습니다 -

Parent.controller.js

class Parent { 
    constructor() { 
    // fill constructor info 
    } 

    createChild(req, res, next) { 
    // do your thing here 
    } 
} 

module.exports = Parent; 

라우터 -

const Parent = require('./Parent.controller.js'); 
const parent = new Parent(); 

Router.post('/create-child', parent.createChild); 
관련 문제