默认路由到MEANJS中的/ api /:版本

时间:2015-05-26 05:08:22

标签: express routes meanjs

我对MEANJS相对较新,我也一直在阅读documentation以了解详情。

所以,我正在尝试使用meanjs使用其yo generator创建一个rest API并删除它的角度部分,到目前为止它已经成功。

我现在要做的是默认网址路由的前缀为/api/:version,我到目前为止所做的是将/api/:version附加到app/内的路由如下

//app/routes/articles.server.routes.js 
'use strict';

...

module.exports = function(app) {
    // Article Routes
    app.route('/api/:version/articles')
    ...

    app.route('/api/:version/articles/:articleId')
    ...

    // Finish by binding the article middleware
    app.param('articleId', articles.articleByID);
};

到目前为止有效,但是我可以在某个地方宣布这个,这样我每次创建新路线时都不必添加/api/:version吗?

我尝试实施the ones stated in express documentationRemi M's answer in this stackoverflow question但没有运气。

更新

meanjs安装附带express.js,所以我认为这是正确的地方,我尝试使用路由器对象来解决这个问题,虽然它不起作用

//config/express.js
'use strict';
...
var express        = require('express');
...
var router         = express.Router();

module.exports = function(db) {
    var app = express();

    ...

    app.use(function(req, res, next) {
        res.locals.url = req.protocol + '://' + req.headers.host + req.url;
        next();
    });

    app.use(compress({
        filter: function(req, res) {
            return (/json|text|javascript|css/).test(res.getHeader('Content-Type'));
        },
        level: 9
    }));

    ...

    config.getGlobbedFiles('./app/routes/**/*.js').forEach(function(routePath) {
        require(path.resolve(routePath))(app);
    });
    app.use(function(err, req, res, next) {
        if (!err) return next();
        console.error(err.stack);
        res.status(500).render('500', {
            error: err.stack
        });
    });

    app.use(function(req, res) {
        res.status(404).render('404', {
            url: req.originalUrl,
            error: 'Not Found'
        });
    });

    ...

    app.use('/api/:version', router); //this is what i add

    return app;
};

1 个答案:

答案 0 :(得分:0)

所有初始配置都应该在路由器对象上,而不是应用于Ex:

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

module.exports = function(db) {
 var app = express();


router.use(function(req, res, next) {
    res.locals.url = req.protocol + '://' + req.headers.host + req.url;
    next();
});

router.use(compress({
    filter: function(req, res) {
        return (/json|text|javascript|css/).test(res.getHeader('Content-Type'));
    },
    level: 9
}));

config.getGlobbedFiles('./app/routes/**/*.js').forEach(function(routePath) {
    require(path.resolve(routePath))(router);
});
router.use(function(err, req, res, next) {
    if (!err) return next();
    console.error(err.stack);
    res.status(500).render('500', {
        error: err.stack
    });
});
router.use('/bar', function(req, res, next) {
    console.log("bar endpoint called");
    res.send("bar");
});
router.use(function(req, res) {
    res.status(404).render('404', {
        url: req.originalUrl,
        error: 'Not Found'
    });
});

  app.use('/api/:version/', router); //this is what i add

  return app;
};

然后按上述方式调用app.use("前缀",路由器)。

测试BAR API / api / v1 / bar