动态分配路线 Node/Express
Assign route dynamically Node/Express
我需要动态分配一条新路线,但由于某种原因它无法工作。
当我在 Postman 中发送请求时,它一直在等待响应
我正在做的事情的全貌如下:
我有一个控制器,其中一个方法带有装饰器
@Controller()
export class Test {
@RESTful({
endpoint: '/product/test',
method: 'post',
})
async testMe() {
return {
type: 'hi'
}
}
}
export function RESTful({ endpoint, method, version }: { endpoint: string, version?: string, method: HTTPMethodTypes }) {
return function (target: any, propertyKey: string, descriptor: PropertyDescriptor): void {
const originalMethod = descriptor.value
Reflect.defineMetadata(propertyKey, {
endpoint,
method,
propertyKey,
version
}, target)
return originalMethod
}
}
export function Controller() {
return function (constructor: any) {
const methods = Object.getOwnPropertyNames(constructor.prototype)
Container.set(constructor)
for (let action of methods) {
const route: RESTfulRoute = Reflect.getMetadata(action, constructor.prototype)
if (route) {
const version: string = route.version ? `/${route.version}` : '/v1'
Container.get(Express).injectRoute((instance: Application) => {
instance[route.method](`/api${version}${route.endpoint}`, async () => {
return await Reflect.getOwnPropertyDescriptor(constructor, route.propertyKey)
// return await constructor.prototype[route.propertyKey](req, res)
})
})
}
}
}
}
是否可以在途中动态设置路由?
我主要使用 GraphQL,但有时我也需要 RESTful API。所以,我想通过那个装饰器来解决这个问题
为了完成响应,必须有 res.end()
or res.json(...)
或类似的。但是我在你的代码中的任何地方都看不到。
我需要动态分配一条新路线,但由于某种原因它无法工作。 当我在 Postman 中发送请求时,它一直在等待响应
我正在做的事情的全貌如下:
我有一个控制器,其中一个方法带有装饰器
@Controller()
export class Test {
@RESTful({
endpoint: '/product/test',
method: 'post',
})
async testMe() {
return {
type: 'hi'
}
}
}
export function RESTful({ endpoint, method, version }: { endpoint: string, version?: string, method: HTTPMethodTypes }) {
return function (target: any, propertyKey: string, descriptor: PropertyDescriptor): void {
const originalMethod = descriptor.value
Reflect.defineMetadata(propertyKey, {
endpoint,
method,
propertyKey,
version
}, target)
return originalMethod
}
}
export function Controller() {
return function (constructor: any) {
const methods = Object.getOwnPropertyNames(constructor.prototype)
Container.set(constructor)
for (let action of methods) {
const route: RESTfulRoute = Reflect.getMetadata(action, constructor.prototype)
if (route) {
const version: string = route.version ? `/${route.version}` : '/v1'
Container.get(Express).injectRoute((instance: Application) => {
instance[route.method](`/api${version}${route.endpoint}`, async () => {
return await Reflect.getOwnPropertyDescriptor(constructor, route.propertyKey)
// return await constructor.prototype[route.propertyKey](req, res)
})
})
}
}
}
}
是否可以在途中动态设置路由? 我主要使用 GraphQL,但有时我也需要 RESTful API。所以,我想通过那个装饰器来解决这个问题
为了完成响应,必须有 res.end()
or res.json(...)
或类似的。但是我在你的代码中的任何地方都看不到。