
项目为节点JS的现代工具执行装饰器,例如:
安装
npm install @decorators/express --save
API 密码
职能
- 附加控制器( app: express. application. QQ Express. Router, 控制器: 控制器[]) - 附加控制器以表达应用程序
- 附录 CaptainInstances(应用程序:Express.Application QQ Express. Router,控制器: Captain []) 控制器: - 附加已存在的控制器实例
装饰者
类
- @ captain( baseUrl: 字符串, 中间软件? ), (中文(简体) ), @ captain( baseUrl: 字符串, 路由器) 选项: 路由器选项, 中间软件 - 基础url的注册控制器
方法
- @ all( url: 字符串, 中间软件? ) - 登记所有路线
- @ Get( URL: 字符串, 中间软件? ) - 登记有路
- @ Post( URL: 字符串, 中间软件 ? : 中间软件 ) - 登记邮站路线
- @ Put( url: 字符串, 中间软件? ) - 登记器设置路线
- @ Delete( URL: 字符串, 中间软件? ) - 登记册删除路线
- @ Patch( URL: 字符串, 中间软件? ) - 注册补丁路线
- @ options( URL: 字符串, 中间软件? : 中间软件[ ]) - 登记选项路由
- @ head( url: 字符串, 中间软件? ) - 登记头路
- @ status( 代码: 号码) - 指定路由的状态代码
中间软件是执行的类 Middleware 接口.
要使用类, 导入 Middleware 接口和执行,例如:
import { Middleware } from '@decorators/express';
class UserMiddleware implements Middleware {
public use(request: Request, response: Response, next: NextFunction): void {
next();
}
}
或简单的函数
function userMiddleware(request: Request, response: Response, next: NextFunction): void {
next();
}
参数
- @ request( 财产? : 字符串) (别名) @ Req( 财产? : 字符串)) - 如果指定名称,返回快取对象或任何其他对象
- @ response( ) (别名) @ Res (英语)) - 返回快递重置对象
- @ next( ) - 返回表达下一个函数
- @ Params( param? : 字符串) - 如果指定了参数名称,则快报req.params对象或单参数
- Query( param? ): 字符串) - 如果指定查询参数名称,则快取req.query对象或单查询参数
- @ body( param? : string) - 如果指定了身体参数名称,则表示直径物体或单体参数
- @ headers( 财产? : 字符串) - 如果指定了标题参数名称,则快取正题或单取正题
- @ Cookies( param? : 字符串) - 如果指定了 cookie 参数名称, 则快递 req.body 对象或单个 cookie 参数
中间软件出错
要添加错误中间软件, 处理未处理错误只需执行 ErrorMiddleware 界面并使用 ERROR_MIDDLEWARE 标志,比如:
import { Container, ErrorMiddleware, ERROR_MIDDLEWARE } from '@decorators/express';
@Injectable()
class ServerErrorMiddleware implements ErrorMiddleware {
public use(error: Error, request: Request, response: Response, next: NextFunction) {
next();
}
}
Container.provide([
{ provide: ERROR_MIDDLEWARE, useClass: ServerErrorMiddleware }
]);
或作为函数
import { Container, ERROR_MIDDLEWARE } from '@decorators/express';
function serverErrorMiddleware(error: Error, request: Request, response: Response, next: NextFunction) {
next();
}
Container.provide([
{ provide: ERROR_MIDDLEWARE, useValue: serverErrorMiddleware }
]);
依赖性注射
本单元支持由下列人员提供的依赖性注射: @decorators/di 模块。 例如,见下文的全部例子.
示例快取应用程序和控制器:
import {
Response, Params, Controller, Get,
attachControllers, Middleware
} from '@decorators/express';
@Controller('/')
class UsersController {
constructor(private userService: UserService) {}
@Get('/users/:id')
getData(@Response() res, @Params('id') id: string) {
res.send(this.userService.findById(id));
}
}
let app = express();
attachControllers(app, [UsersController]);
app.listen(3000);
也可以附加控制器来表示. 路由器实例。 如果您想要将所有路由命名为前缀时, 这样做是有用的 :
import { attachControllers } from '@decorators/express';
const apiRouter = express.Router();
attachControllers(apiRouter, [UsersController]);
app.use('/v1/api', apiRouter);
您也可以使用自定义的装饰器作为中间软件 :
自定义装饰
import { attachMiddleware } from "@decorators/express";
import {Request,Response,NextFunction} from '@decorators/express/node_modules/express';
export function Access(key: string) {
return function (target: any,propertyKey: string,descriptor: PropertyDescriptor) {
attachMiddleware(target,propertyKey,(req : Request,res : Response,next : NextFunction)=>{
if(["CAN_ACCESS_TEST","CAN_ACCESS_HOME"].includes(key)){
next();
}else{
res.send("ACCESS DENIED");
}
})
};
}
控制器代码
@Controller("/")
export class MainController {
@Access("CAN_ACCESS_TEST")
@Get("/test")
getB() {
return "You can access the test";
}
@Access("CAN_ACCESS_HOME")
@Get("/home")
getB() {
return "You can access the home";
}
}
说明:- Please use custom decorators before express decorators otherwise system will not detect any controller metadata and your decorator will not invoked.
将工作:
@Access("CAN_ACCESS_TEST")
@Get("/test")
getB() {
return "You can access the test";
}
将不工作:
@Get("/test")
@Access("CAN_ACCESS_TEST")
getB() {
return "You can access the test";
}