2016-06-26 30 views
1

我试图在运行时创建路由。我试图创建一个平坦的网址结构,所以如果我们添加一篇文章,它会为它创建一个slu and,并将创建一个新的路线。在运行时创建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; 

我试图创建在路由器的功能,并从应用程序中调用它。 js还在路由器中创建一个功能,同时共享应用程序实例文件

module.exports = app; 

,把它

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世界的例子* http://expressjs.com/en/starter/hello-world.html并相应地改变你的app.js,并添加你所有的'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 }

如果你想使用的查询参数,而不是(用”?..... /物品ID = 234" ),那么你将不得不使用req.query。看看下面的页面http://expressjs.com/en/api.html#req.params

请求参数被认为是最好的做法,因为它们更具可读性并且对搜索引擎友好。您可以编辑模型以将文章slug作为字段存储,但应该是唯一的,这样它们可以用于查询您的数据库。

+0

你好,我想避免从seo的原因在url中有另一部分,所以没有使用params只匹配slu 012 – Crimeira

+0

好吧。那么,我怕我帮不了你。提到的方式可能是处理这一问题的最佳方法,并在业界广泛使用。我不知道你在努力完成什么,为什么你想要这样做,但我希望你最好。期待看到是否会有任何解决方案 – Courtney