我正在使用Express3框架在node.js上创建一个web api,我希望我的路由看起来像/v0.1/function
。
理想情况下,路由应该通过查看url中给出的主要版本号和次要版本号自动加载指定的版本模块。到目前为止,我的方法是:
app.use('/v:major.:minor', function(req) {
return require('./v' + req.params.major + '.' +
req.params.minor);
});
在我的./v0.1/index.js
:
module.exports = function() {
var express = require('express'),
app = express();
app.get('/test', function(req, res) {
res.json({ success: true });
});
return app;
}();
如果我现在拨打/v0.1/test
,它与路线(404)不匹配,但app.get('/v:major.:minor', function(req, res) { /* ... */ });
工作正常。
我怎样才能做到这一点?
答案 0 :(得分:2)
我认为你想要app.all
(http://expressjs.com/api.html#app.all)
这将使所有HTTP动词都可以访问,并且仍然可以使用变量路由。
我测试过它似乎有效。
根据评论编辑
app.all('/v:major.:minor/:endpoint', function(req, res, next) {
var version_handler = require('./v' + req.params.major + '.' + req.params.minor);
if (!req.params.endpoint in version_handler) // endpoint_isn't supported at this version, 404
version_handler[req.params.endpoint](req, res, next);
});
答案 1 :(得分:0)
您必须使用app.param()
。来自express API中的示例:
app.param('id', /^\d+$/);
app.get('/user/:id', function(req, res){
res.send('user ' + req.params.id);
});
您必须在URL中为参数提供正则表达式,因为major,minor都是非负整数/^\d+$/
应该适合您。
答案 2 :(得分:0)
<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<head>
<title>Page Title</title>
<css src="Namespace_Module::css/styles.css"/>
<script src="Namespace_Module::js/angular/angular.min.js"></script>
<script src="Namespace_Module::js/app.js"></script>
</head>
<body>
<referenceContainer name="content">
<block class="Namespace\Module\Block\Class" name="Namespace_Module" template="Template.phtml"></block>
</referenceContainer>
</body>
</page>
api 是您的路由器对象