默认路由到 /api/:MEANJS 中的版本
Defaulting route to /api/:version in MEANJS
我对 MEANJS, i have also been reading through its documentation 比较陌生,想了解更多。
所以,我正在尝试使用 meanjs 创建一个休息 API,使用它的 yo generator
并删除它的 angular 部分,到目前为止它是成功的。
我现在要做的是默认 url 路由的前缀为 /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 and Remi M's answer in this Whosebug 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;
};
您所有的初始配置都应该在路由器对象上,而不是在应用程序上例如:
'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("prefixurl",router)。
测试 BAR API /api/v1/bar
我对 MEANJS, i have also been reading through its documentation 比较陌生,想了解更多。
所以,我正在尝试使用 meanjs 创建一个休息 API,使用它的 yo generator
并删除它的 angular 部分,到目前为止它是成功的。
我现在要做的是默认 url 路由的前缀为 /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 and Remi M's answer in this Whosebug 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;
};
您所有的初始配置都应该在路由器对象上,而不是在应用程序上例如:
'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("prefixurl",router)。
测试 BAR API /api/v1/bar