2016-06-26 5 views
1

런타임시 라우트를 작성하려고합니다. 플랫 URL 구조를 만들려고합니다. 기사를 추가하면 슬러그가 만들어지고 새 경로가 만들어집니다.런타임시 nodejs express 4 라우트 작성

나는 특급 4 개의 새로운 라우터 기능을 사용

내가 라우터에서 함수를 만들고 응용 프로그램에서 호출 시도

var express = require('express'); 
var routes = require('./routes.js'); 
app.use('/', routes); 

var server = http.createServer(app).listen(app.get('port')); 

routes.js

var express    = require('express'); 
var router    = express.Router(); 

router.get('/new' ,site.new); 
module.exports = router; 

을 app.js. 또한 파일에 걸쳐 앱 인스턴스를 공유하면서 라우터에 기능을 생성합니다.

(10)과 전화

var app = require("./app.js"); 

그것은 다른 생각을 제대로 작동 나던?

갱신 :

내가 파일을 불렀다 helpers.js와 나는

module.exports={ 

    addRoute:function(){ 
    var express    = require('express'); 
    var router    = express.Router();  
    var app = require('../app.js'); 
    var routes = require('../routes.js'); 

    router.get('/book', function (req, res) { 
     res.send('Hello World!'); 
    }); 


    app.use('/book', router); 
}, 

내가하고 결국 다음과 같은 기능을 추가하는

addRoute : 함수() {

var express    = require('express'); 
    var router    = express.Router(); 
    var routes    = require('../routes.js'); 
    var app     = require('../start-freedom1.js'); 

    router.get('/book' ,function (req, res, next) { 
     res.send({"data":"kaki","values":"","errors":""}); 
    }); 


    for(var layer in app._router.stack){ 

     if(app._router.stack[layer].name=="router"){ 

      app._router.stack[layer].handle.stack.splice(0, 0, router.stack[0]); 
      console.log(app._router.stack[layer].handle.stack) 
      break; 
     } 
    } 

    ///app.use('/', routes); 
}, 

내가 router.get ("*"..... 라우트 파일의 끝에서 항상 404를 보았습니다.

+0

이 * Hello world example * http://expressjs.com/en/starter/hello-world.html을보고 app.js를 적절히 변경하고 alredy에 'var routes = require (' ./routes.js '); app.use ('/', routes);'routes.js가 좋습니다. – Molda

답변

0

당신이 찾고있는 것은 추출 할 수있는 URL의 매개 변수를 전달하고 일부 처리를 수행하는 것입니다. 당신은 다음과 같은 것을 수행 할 수 있습니다

app.get('/article/:article_id', function(req, res){ art_id = req.params.article_id; //query database using art_id }

이 대신 쿼리 매개 변수를 사용하려면 (함께 "? ...../자료 = 234")를 사용할 것 req.query. 다음 페이지 http://expressjs.com/en/api.html#req.params을보십시오.

요청 매개 변수는 읽기 쉽고 검색 엔진 최적화를위한 최적의 방법으로 간주됩니다. 기사 슬러그를 필드로 저장하도록 모델을 편집 할 수는 있지만 고유해야하므로 DB 쿼리에 사용할 수 있습니다.

+0

안녕하세요, 나는 서글 때문에 url의 다른 부분을 가지고 싶지 않으므로 params 만 일치하는 슬러그 만 사용하지 않고 – Crimeira

+0

OK. 글쎄, 나는 너를 도울 수 없어. 방법은 아마도 이것을 처리하는 가장 좋은 방법으로 언급되었으며 업계에서 널리 사용됩니다. 나는 당신이 성취하고자하는 바를 알지 못합니다. 왜 그런 식으로 일하려고하는지 알고 있지만 어쨌든 최선을 기원합니다. 이 문제에 대한 해결책이 있는지보기를 기대합니다. – Courtney