2016-06-26 5 views
1

実行時にルートを作成しようとしています。私はフラットなURL構造を作成しようとしています。記事を追加すると、記事のスラッグが作成され、新しいルートが作成されます。実行時にnodejs express 4ルートを作成

私は特急4新しいルータ機能に

app.js

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; 

を使用

私は、ルータ内の関数を作成し、アプリからそれを呼び出してみました。また、ファイル全体にアプリインスタンスを共有しながら、ルータに機能を作成します。

10と、それを呼び出す

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

それは、他のアイデアを働くように見えるdoesntの?

更新:

私はhelpers.jsと呼ばれるファイルを持っていると私は私が

そのaddRouteやって終わる次の関数

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); 
}, 

を追加しました:関数(){

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をご覧ください。

リクエストパラメータは、読みやすく、SEOにも優れているため、ベストプラクティスと見なされます。記事のスラッグをフィールドとして保存するようにモデルを編集することはできますが、ユニークである必要があります。そうすれば、DBを照会することができます。

+0

こんにちは私はサングラスの理由からurlの別の部分を持つことを避けたかったので、スラグと一致するだけのパラメータを使用しないで – Crimeira

+0

OK。まあ、私はあなたを助けることができないのが怖いです。おそらくこれを処理する最良の方法で言及された方法は、業界で広く使用されています。私はあなたが何を達成しようとしているのか、なぜあなたはそのようなことをやろうとしているのかはわかりませんが、とにかくあなたに最高のことを願っています。これに対する解決策があるかどうかを見て – Courtney

関連する問題