Skip to content

Commit

Permalink
feat(server): add start:server command
Browse files Browse the repository at this point in the history
  • Loading branch information
solufa committed May 7, 2020
1 parent c01b0e9 commit 472d115
Show file tree
Hide file tree
Showing 15 changed files with 42 additions and 21 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -110,3 +110,5 @@ sw.*

### Miscellaneous
package-lock.json

.aspida
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
"dev:openapi": "npm run build:openapi && cd packages/openapi2aspida && node samples/rimraf.js && node bin/index.js --build",
"dev:mock": "npm run build:mock && cd packages/aspida-mock && aspida -b && node bin/index.js --build",
"dev:path": "npm run build:path && cd packages/pathpida && node bin/index.js --build",
"start:server": "cd packages/aspida-server && node bin/index.js --build && tsc --project tsconfig.server.json && node .aspida/$server.js",
"build:aspida": "npm run rimraf -- aspida && cd packages/aspida && tsc --project tsconfig.build.json",
"build:server": "npm run rimraf -- aspida-server && cd packages/aspida-server && tsc --project tsconfig.build.json",
"build:axios": "npm run rimraf -- aspida-axios && cd packages/aspida-axios && tsc --project tsconfig.build.json",
Expand Down
6 changes: 3 additions & 3 deletions packages/aspida-server/apis/$controllers.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/* eslint-disable */
import controller0 from './@controller'
import controller1 from './user/@controller'
import controller2 from './user/_userId@number/@controller'
import controller1 from './users/@controller'
import controller2 from './users/_userId@number/@controller'
import middleware0 from './@middleware'

export default {
Expand All @@ -11,7 +11,7 @@ export default {
children: {
names: [
{
name: '/user',
name: '/users',
controller: controller1,
children: {
value: {
Expand Down
16 changes: 11 additions & 5 deletions packages/aspida-server/apis/@controller.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,15 @@
import { createController } from 'aspida-server'
import { Methods } from '.'

export default createController<Methods>({
get: v => {
return new Promise(resolve => resolve({ status: 200, resBody: v.query }))
export default createController<Methods>([
(req, res, next) => {
console.log('Controller level middleware:', req.path)
next()
},
post: async () => ({ status: 200, resBody: { id: 1 } })
})
{
get: v => {
return new Promise(resolve => resolve({ status: 200, resBody: v.query }))
},
post: async () => ({ status: 200, resBody: { id: 1 } })
}
])
5 changes: 4 additions & 1 deletion packages/aspida-server/apis/@middleware.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
import { createMiddleware } from 'aspida-server'

export default createMiddleware([])
export default createMiddleware((req, res, next) => {
console.log('Directory level middleware:', req.path)
next()
})
File renamed without changes.
File renamed without changes.
File renamed without changes.
25 changes: 15 additions & 10 deletions packages/aspida-server/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -88,12 +88,12 @@ export const createController = <T extends AspidaMethods, U extends ServerValues
methods: ServerMethods<T, U> | (RequestHandler | ServerMethods<T, U>)[]
) => methods

export const createMiddleware = (middleware: RequestHandler[]) => middleware
export const createMiddleware = (middleware: RequestHandler | RequestHandler[]) => middleware

export type ControllerTree = {
name: string
controller?: ServerMethods<any, any> | (RequestHandler | ServerMethods<any, any>)[]
middleware?: RequestHandler[]
middleware?: RequestHandler | RequestHandler[]
children?: {
names?: ControllerTree[]
value?: ControllerTree
Expand All @@ -106,29 +106,30 @@ const methodsToHandler = (methods: ServerMethods<any, any>): RequestHandler => a
return
}

const result: any = await methods[req.method.toLowerCase()]({
const result = (await methods[req.method.toLowerCase()]({
query: req.query,
path: req.path,
method: req.method as HttpMethod,
reqBody: {},
reqHeaders: {},
params: req.params,
user: (req as any).user
})
}).catch(() => ({ status: 500, resBody: 'Internal Server Error' }))) as AllResponse<any, any>

Object.entries((result.resHeaders as Record<string, any>) ?? {}).forEach(([key, val]) => {
res.setHeader(key, val)
})
res.status(result.status).send(result.resBody)
res.status(result.status).json(result.resBody)
}

/* eslint-disable no-unused-expressions */
export const createRouter = (ctrl: ControllerTree) => {
const router = express.Router({ mergeParams: true })

ctrl.middleware?.forEach(handler => {
router.use(handler)
})
if (ctrl.middleware) {
;(Array.isArray(ctrl.middleware) ? ctrl.middleware : [ctrl.middleware]).forEach(handler => {
router.use(handler)
})
}

if (ctrl.controller) {
const methods = (Array.isArray(ctrl.controller) ? ctrl.controller : [ctrl.controller]).map(m =>
Expand All @@ -138,12 +139,16 @@ export const createRouter = (ctrl: ControllerTree) => {
}

if (ctrl.children) {
// eslint-disable-next-line no-unused-expressions
ctrl.children.names?.forEach(n => {
router.use(n.name, createRouter(n))
})

if (ctrl.children.value) {
router.use(ctrl.children.value.name.replace('_', ':'), createRouter(ctrl.children.value))
router.use(
ctrl.children.value.name.replace('_', ':').split('@')[0],
createRouter(ctrl.children.value)
)
}
}

Expand Down
5 changes: 5 additions & 0 deletions packages/aspida-server/tsconfig.server.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"extends": "../../tsconfig.json",
"compilerOptions": { "outDir": ".aspida" },
"include": ["apis/**/*"]
}
3 changes: 1 addition & 2 deletions tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,5 @@
"sourceMap": true,
"strict": true,
"target": "es5"
},
"exclude": ["dist"]
}
}

0 comments on commit 472d115

Please sign in to comment.