chenos 8bf23004a1
refactor: middleware (#857)
* refactor: middleware

* fix: test error

* fix: test error

* fix: test

* fix: tag
2022-09-29 21:05:31 +08:00

44 lines
1.2 KiB
TypeScript

import Database from '@nocobase/database';
import { getNameByParams, parseRequest, ResourcerContext, ResourceType } from '@nocobase/resourcer';
export function db2resource(ctx: ResourcerContext & { db: Database }, next: () => Promise<any>) {
const resourcer = ctx.resourcer;
const database = ctx.db;
let params = parseRequest(
{
path: ctx.request.path,
method: ctx.request.method,
},
{
prefix: resourcer.options.prefix,
accessors: resourcer.options.accessors,
},
);
if (!params) {
return next();
}
const resourceName = getNameByParams(params);
// 如果资源名称未被定义
if (resourcer.isDefined(resourceName)) {
return next();
}
const [collectionName, fieldName] = resourceName.split('.');
// 如果经过加载后是已经定义的表
if (!database.hasCollection(collectionName)) {
return next();
}
const collection = database.getCollection(collectionName);
let resourceType: ResourceType = 'single';
if (fieldName && collection.hasField(fieldName)) {
const field = collection.getField(fieldName);
resourceType = field.type;
}
resourcer.define({
type: resourceType,
name: resourceName,
});
return next();
}
export default db2resource;