mirror of https://github.com/certd/certd
				
				
				
			
		
			
				
	
	
		
			54 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
			
		
		
	
	
			54 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
| import Koa from 'koa'
 | |
| import json from 'koa-json'
 | |
| import onerror from 'koa-onerror'
 | |
| import bodyparser from 'koa-bodyparser'
 | |
| import logger from 'koa-logger'
 | |
| import Static from 'koa-static'
 | |
| import fs from 'fs'
 | |
| import _ from 'lodash-es'
 | |
| 
 | |
| const app = new Koa()
 | |
| 
 | |
| // error handler
 | |
| onerror(app)
 | |
| 
 | |
| // middlewares
 | |
| app.use(bodyparser({
 | |
|   enableTypes: ['json', 'form', 'text']
 | |
| }))
 | |
| app.use(json())
 | |
| app.use(logger())
 | |
| 
 | |
| app.use(Static(new URL('public', import.meta.url).pathname))
 | |
| 
 | |
| // logger
 | |
| app.use(async (ctx, next) => {
 | |
|   const start = new Date()
 | |
|   await next()
 | |
|   const ms = new Date() - start
 | |
|   console.log(`${ctx.method} ${ctx.url} - ${ms}ms`)
 | |
| })
 | |
| 
 | |
| console.log('url', import.meta.url)
 | |
| 
 | |
| // routes
 | |
| const files = fs.readdirSync(new URL('controllers/', import.meta.url))
 | |
| // 过滤出.js文件:
 | |
| const jsFiles = files.filter((f) => {
 | |
|   return f.endsWith('.js')
 | |
| })
 | |
| 
 | |
| _.forEach(jsFiles, async item => {
 | |
|   let mapping = await import(new URL('controllers/' + item, import.meta.url))
 | |
|   mapping = mapping.default
 | |
|   app.use(mapping.routes(), mapping.allowedMethods())
 | |
| })
 | |
| 
 | |
| // error-handling
 | |
| app.on('error', (err, ctx) => {
 | |
|   console.error('server error', err, ctx)
 | |
| })
 | |
| 
 | |
| console.log('http://localhost:3000/')
 | |
| export default app
 |