Skip to content

Commit f6ec8ae

Browse files
committed
[后端] 生命周期添加mountingRoute,并增加对应的挂载路由插件
1 parent 233ba5f commit f6ec8ae

File tree

10 files changed

+93
-44
lines changed

10 files changed

+93
-44
lines changed

server/app.js

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,15 @@ const router = koaRouter()
2727
const beforeRestfulRoutes = lifecycle.getBeforeRestfulRoutes()
2828
const afterRestfulRoutes = lifecycle.getAfterRestfulRoutes()
2929

30-
router.post(
31-
'/admin/qiniu',
32-
...beforeRestfulRoutes,
33-
require('./service/qiniu'),
34-
...afterRestfulRoutes
35-
)
36-
router.post('/admin/login', require('./auth/login'))
37-
router.post('/admin/logout', require('./auth/logout'))
30+
const middlewareRoutes = lifecycle.getMiddlewareRoutes()
31+
32+
for (const item of middlewareRoutes) {
33+
const middlewares = [...item.middleware]
34+
item.needBeforeRoutes && middlewares.unshift(...beforeRestfulRoutes)
35+
item.needAfterRoutes && middlewares.push(...afterRestfulRoutes)
36+
37+
router[item.method](item.path, ...middlewares)
38+
}
3839

3940
Object.keys(models).map(name => models[name]).forEach(model => {
4041
mongoRest(router, model, '/api', {
@@ -53,7 +54,7 @@ const router = koaRouter()
5354
}
5455

5556
app.listen(config.serverPort, () => {
56-
log.debug(`koa2 is running at ${config.serverPort}`)
57+
log.info(`Koa2 is running at ${config.serverPort}`)
5758
})
5859
} catch (err) {
5960
log.error(err)

server/blogpack.js

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,22 +17,33 @@ class blogpack {
1717
}
1818
}
1919

20+
getMiddlewareRoutes(...args) {
21+
return this.plugins
22+
.filter(plugin => plugin['mountingRoute'])
23+
.map(plugin => {
24+
return Object.assign({}, plugin.mountingRoute(), {
25+
needBeforeRoutes: plugin.needBeforeRoutes || false,
26+
needAfterRoutes: plugin.needAfterRoutes || false
27+
})
28+
})
29+
}
30+
2031
getBeforeRestfulRoutes() {
2132
return this.plugins
22-
.filter(plugin => plugin['beforeRestful'])
23-
.map(plugin => plugin['beforeRestful'])
33+
.filter(plugin => plugin['beforeRestful'])
34+
.map(plugin => plugin['beforeRestful'])
2435
}
2536

2637
getAfterRestfulRoutes() {
2738
return this.plugins
28-
.filter(plugin => plugin['afterRestful'])
29-
.map(plugin => plugin['afterRestful'])
39+
.filter(plugin => plugin['afterRestful'])
40+
.map(plugin => plugin['afterRestful'])
3041
}
3142

3243
getBeforeServerStartFuncs() {
3344
return this.plugins
34-
.filter(plugin => plugin['beforeServerStart'])
35-
.map(plugin => plugin['beforeServerStart'])
45+
.filter(plugin => plugin['beforeServerStart'])
46+
.map(plugin => plugin['beforeServerStart'])
3647
}
3748
}
3849

server/build/blogpack.prod.config.js

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ const blogpack = require('../blogpack')
22
const base = require('./blogpack.base.config')
33
const useRoutesPrefix = '../plugins/beforeUseRoutes'
44
const serverStartPrefix = '../plugins/beforeServerStart'
5+
const env = process.env
56

67
const config = Object.assign({}, base, {
78
plugins: base.plugins.concat([
@@ -17,12 +18,17 @@ const RatelimitPlugin = require(`${useRoutesPrefix}/ratelimit`)
1718
const BodyParserPlugin = require(`${useRoutesPrefix}/bodyParser`)
1819
const LogTimePlugin = require(`${useRoutesPrefix}/logTime`)
1920
const RestcPlugin = require(`${useRoutesPrefix}/restc`)
21+
2022
const InitOptionPlugin = require(`${serverStartPrefix}/initOption`)
2123
const InstallThemePlugin = require(`${serverStartPrefix}/installTheme`)
2224
const InitUserPlugin = require(`${serverStartPrefix}/initUser`)
2325

2426
const CheckAuthPlugin = require('../plugins/beforeRestful/checkAuth')
2527

28+
const QiniuUploadPlugin = require('../plugins/mountingRoute/qiniu')
29+
const LoginPlugin = require('../plugins/mountingRoute/login')
30+
const LogoutPlugin = require('../plugins/mountingRoute/logout')
31+
2632
config.plugins.push(
2733
// beforeUseRoutes
2834
new RatelimitPlugin({
@@ -35,13 +41,24 @@ config.plugins.push(
3541
new LogTimePlugin(),
3642
new RestcPlugin(),
3743

44+
// beforeRestful
45+
new CheckAuthPlugin(),
46+
47+
// moutingRoute
48+
new QiniuUploadPlugin({
49+
qiniuAccessKey: env.qiniuAccessKey || '',
50+
qiniuSecretKey: env.qiniuSecretKey || '',
51+
qiniuBucketHost: env.qiniuBucketHost || '',
52+
qiniuBucketName: env.qiniuBucketName || '',
53+
qiniuPipeline: env.qiniuPipeline || ''
54+
}),
55+
new LoginPlugin(),
56+
new LogoutPlugin(),
57+
3858
// beforeServerStart
3959
new InitUserPlugin(),
4060
new InstallThemePlugin(),
41-
new InitOptionPlugin(),
42-
43-
// beforeRestful
44-
new CheckAuthPlugin()
61+
new InitOptionPlugin()
4562
)
4663

4764
module.exports = config

server/conf/config.tpl

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,5 @@ module.exports = {
1515
tokenExpiresIn: env.tokenExpiresIn || 3600,
1616
1717
defaultAdminName: env.defaultAdminName || 'admin',
18-
defaultAdminPassword: env.defaultAdminPassword || 'admin',
19-
20-
qiniuAccessKey: env.qiniuAccessKey || '',
21-
qiniuSecretKey: env.qiniuSecretKey || '',
22-
qiniuBucketHost: env.qiniuBucketHost || '',
23-
qiniuBucketName: env.qiniuBucketName || '',
24-
qiniuPipeline: env.qiniuPipeline || ''
18+
defaultAdminPassword: env.defaultAdminPassword || 'admin'
2519
}

server/lifecycle/index.js

Lines changed: 0 additions & 6 deletions
This file was deleted.

server/model/mongo.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ db.on('error', (err) => {
1515
})
1616

1717
db.once('open', () => {
18-
log.debug('MongoDB is ready')
18+
log.info('MongoDB is ready')
1919
})
2020

2121
const Schema = mongoose.Schema

server/model/redis.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ client.on('error', function(err) {
1818
})
1919

2020
client.on('connect', function() {
21-
log.debug('Redis is ready')
21+
log.info('Redis is ready')
2222
})
2323

2424
module.exports = client

server/auth/login.js renamed to server/plugins/mountingRoute/login.js

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,18 @@
1-
const redis = require('../model/redis')
2-
const tokenService = require('../service/token')
3-
const { user: model } = require('../model/mongo')
1+
const redis = require('../../model/redis')
2+
const tokenService = require('../../service/token')
3+
const { user: model } = require('../../model/mongo')
44

5-
module.exports = async function(ctx, next) {
5+
module.exports = class {
6+
mountingRoute() {
7+
return {
8+
method: 'post',
9+
path: '/admin/login',
10+
middleware: [middleware]
11+
}
12+
}
13+
}
14+
15+
async function middleware(ctx, next) {
616
let users, user
717

818
try {

server/auth/logout.js renamed to server/plugins/mountingRoute/logout.js

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,17 @@
1-
const redis = require('../model/redis')
2-
const tokenService = require('../service/token')
1+
const redis = require('../../model/redis')
2+
const tokenService = require('../../service/token')
33

4-
module.exports = async function(ctx, next) {
4+
module.exports = class {
5+
mountingRoute() {
6+
return {
7+
method: 'post',
8+
path: '/admin/logout',
9+
middleware: [middleware]
10+
}
11+
}
12+
}
13+
14+
async function middleware(ctx, next) {
515
const headers = ctx.request.headers
616
let token
717
try {

server/service/qiniu.js renamed to server/plugins/mountingRoute/qiniu.js

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ let {
55
qiniuSecretKey,
66
qiniuBucketName,
77
qiniuPipeline
8-
} = require('../conf/config')
8+
} = require('../../conf/config')
99

1010
qiniu.conf.ACCESS_KEY = qiniuAccessKey
1111
qiniu.conf.SECRET_KEY = qiniuSecretKey
@@ -43,6 +43,18 @@ const getQiniuTokenFromFileName = (fileName) => {
4343
}
4444
}
4545

46-
module.exports = ({ request, response }, next) => {
47-
return response.body = getQiniuTokenFromFileName(request.body.key)
46+
module.exports = class {
47+
mountingRoute() {
48+
return {
49+
method: 'post',
50+
path: '/admin/qiniu',
51+
needBeforeRoutes: true,
52+
middleware: [
53+
function({ request, response }, next) {
54+
return response.body = getQiniuTokenFromFileName(request.body.key)
55+
}
56+
],
57+
needAfterRoutes: false
58+
}
59+
}
4860
}

0 commit comments

Comments
 (0)