对 Express 中的所有模型使用相同的路由器模式
Use same router schema for all models in Express
假设我有 Node.JS 应用程序由 3 个模型组成:project、task, 用户.
我想为这些模型创建路由,但具有相同的路由器模式:
'use strict';
var express = require('express');
var router = express.Router();
module.exports = function (entity) {
router.route('/:entity_id')
.get(get_entity);
var get_entity = function (req, res) {
res.send(entity + req.params.entity_id);
};
router.get('/', function (req, res) {
res.send(entity);
});
return router;
};
我的解决方案是将文件读入 /models 目录,并为找到的文件创建路由器实例:
var path= require('path');
var fs= require('fs');
var modelsDir= fs.readdirSync(path.join(__dirname, '../models'));
modelsDir.forEach(function (model) {
if (model.indexOf('.js') > -1) {
var modelName = model.substr(0, model.length-3);
app.use('/'+modelName, require('./api/global')(modelName));
}
});
当我启动应用程序时,有些奇怪;这是我在浏览器中的输出:
- /项目 --> "project"
- /project/2 --> "project2"
- /任务 --> "project"
- /task/2 --> "project2"
- /用户 --> "project"
我猜路由器是在第一次调用 app.use()
时创建的(对于 project),然后 express 应用程序将此路由器用于给定的新路径(任务,用户)。但是我如何以编程方式为每个模型定义一个路由器? (我有五十个不同的模型...)
只需将 var router = express.Router();
放入 module.exports
函数中
router是同一个对象,第二次调用的时候会覆盖之前的实现,当你把声明放在里面的时候,每次调用这个函数,都会创建一个新的实例,不会覆盖上一个
假设我有 Node.JS 应用程序由 3 个模型组成:project、task, 用户.
我想为这些模型创建路由,但具有相同的路由器模式:
'use strict';
var express = require('express');
var router = express.Router();
module.exports = function (entity) {
router.route('/:entity_id')
.get(get_entity);
var get_entity = function (req, res) {
res.send(entity + req.params.entity_id);
};
router.get('/', function (req, res) {
res.send(entity);
});
return router;
};
我的解决方案是将文件读入 /models 目录,并为找到的文件创建路由器实例:
var path= require('path');
var fs= require('fs');
var modelsDir= fs.readdirSync(path.join(__dirname, '../models'));
modelsDir.forEach(function (model) {
if (model.indexOf('.js') > -1) {
var modelName = model.substr(0, model.length-3);
app.use('/'+modelName, require('./api/global')(modelName));
}
});
当我启动应用程序时,有些奇怪;这是我在浏览器中的输出:
- /项目 --> "project"
- /project/2 --> "project2"
- /任务 --> "project"
- /task/2 --> "project2"
- /用户 --> "project"
我猜路由器是在第一次调用 app.use()
时创建的(对于 project),然后 express 应用程序将此路由器用于给定的新路径(任务,用户)。但是我如何以编程方式为每个模型定义一个路由器? (我有五十个不同的模型...)
只需将 var router = express.Router();
放入 module.exports
函数中
router是同一个对象,第二次调用的时候会覆盖之前的实现,当你把声明放在里面的时候,每次调用这个函数,都会创建一个新的实例,不会覆盖上一个