boilerplate express entity based
Security Updates
初始 API 架构。包含一组基本且必须具备的模块、服务和配置。
使用 Express 中间件来分割功能并具有逻辑上独立的部分。每个路由器/端点可能有一系列中间件来验证数据、从数据源加载数据、映射数据、检查权限并执行主要业务逻辑。
每个中间件函数在整个链集中都应该具有相同的名称。
示例:如果用户创建过程的新请求传递多个中间件函数,则所有中间件函数应具有相同的名称( createOne(req, res, next)
)
*例外:不相关的“帮助”中间件
例子:
appRoute.get('/:userId',
authMiddleware.isAuthenticated,
acl.getOne,
validator.getOne,
loader.getOne,
controller.getOne,
);
./app/middlewares/
链接项目以执行自己的特定功能。
检查当前请求是否可以到达业务逻辑。该层可以检查登录用户是否有权执行该请求。
例子:
async getOne(req, res, next) {
if (mainAcl.isAdmin(req.user)) {
return next();
}
const userIdRequested = req.params.userId;
const userIdCurrent = req.user._id.toString();
if (userIdRequested === userIdCurrent) {
return next();
}
return next(new Forbidden());
},
映射传出/传入数据以供另一个函数进一步处理。
例子:
updateOne(req, res, next) {
delete req.body.password;
delete req.body.confirm_password;
return next();
},
根据安装的规则验证传入数据,以防止处理无效数据。
例子:
deleteOne(req, res, next) {
req.assert('userId', 'Valid user id should be provided').notEmpty().isMongoId();
mainValidator.handleValidationResult(mainValidator.validateErrorsSync(req), res, next);
},
从可用数据源加载/获取业务逻辑实体/对象所需的数据。系统可以从数据库检索用户或相关实体或处理数据。
将加载的实体存储并传递到req
(请求)对象内的特殊对象中。实体加载器服务应该用于 sed 所有实体并在请求对象内传递。
例子:
async getOne(req, res, next) {
try {
const userFound = await UserService.findOne({ query: { _id: req.params.userId }, options: { lean: true } });
if (!mainHelper.isObjectValid(userFound)) {
throw new NotFound('user not found');
}
MainLoader.setEntities(req, { user: userFound });
return next();
} catch (err) {
return next(err);
}
},
./app/services/
服务执行要在应用程序内部调用的单一焦点功能,以处理业务逻辑。
./commands
请访问 https://nodejs.org 了解安装详细信息。
节点包管理器,应该与节点捆绑在一起。
安装 MongoDB https://docs.mongodb.com/manual/installation/
$ git clone <package url> .
$ npm install
config/env/env.local
文件并从config/env/env.local_example
复制数据config/env/.env.test
文件并从config/env/.env.test_example
复制数据$ npm run start:[environment]
示例: $ npm run start:local