我对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 documentation和Remi 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;
};
答案 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