предисловие
Читать много статей писать на стороне сервера визуализации (next.js), но обнаружил, что сторона службы рендеринга Finder некоторые из более простого или менее систематическим, например, если вы делаете презентацию или демо еще возможно, но на практике не способствует разделению труда по применению, развернутого на линии. Очевидно, что вы можете сделать крупномасштабные проекты, но не знаете, как применять, так что принять эти болевые точки и сомнение, я решил сделать свой собственный набор следующего + коа + рамка MongoDB может быть применен к проекту проекта на уровне приложений (этот проект по-прежнему обновляется), проект по-прежнему продолжил оптимизацию, мы можем надеяться много указывающих.
Человек несколько слов сказал на карте первым начал внедрять идею планирования и проектов в рамках
проектов
Это главная страница проекта, мы должны быть в состоянии видеть это, это пародия проекта личного блога Nuggets. Содержит основной Логин, регистрация, писать статьи, чтобы показать статью. , , Последующий будет продолжать добавлять новые функции. Цель размещена на линии непрерывной итерации, зрелая и в конце концов сделала полный проект.
схема проекта
- apps.js запись файлов
const Koa = require('koa')
const next = require('next')
const koaRoute = require('./router')
const bodyParser = require('koa-bodyparser');
const middleware = require('./middleware')
const cors = require('koa2-cors');
const port = parseInt(process.env.PORT, 10) || 3000
const dev = process.env.NODE_ENV !== 'production'
const app = next({ dev })
const handle = app.getRequestHandler()
app.prepare()
.then(() => {
const server = new Koa()
//注入中间件
middleware(server)
server.use(bodyParser())
//注入路由
koaRoute(server,app,handle)
server.listen(port, () => {
console.log(`> Ready on http://localhost:${port}`)
})
})
复制代码
1.middleware
apps.js файл запись является относительно простым, потому что основная логика пакета в узел, начать говорить промежуточное программное обеспечение
const bodyParser = require('koa-bodyparser');
const logger = () => {
return async (ctx, next) => {
const start = Date.now()
bodyParser()
await next()
const responseTime = (Date.now() - start)
console.log(`响应时间为: ${responseTime / 1000}s`)
}
}
module.exports = (app) => {
app.use(logger())
}
复制代码
Если вы прочитали КОА документа обнаружат, что независимо от маршрута и использования плагин, нам нужно новый Коа (), а затем использовать в дальнейшем называть, только использовать этот метод время отклика, он может быть использован более среди среднего, если введен на вводится на входе будет более сложным, так что общий метод упаковки, может продолжать добавлять на входе только один раз она вводится.
2. контроллер
апи в getListInfor.js:
const DB = require('../db')
const loginInfor = (app) =>{
return async (ctx, next) => {
await DB.insert(ctx.request.body).then(res =>{
ctx.response.body = {
infor:'ok'
}
})
}
}
module.exports = loginInfor
复制代码
ввиду home.js
const home = (app) =>{
return async (ctx, next) => {
await app.render(ctx.req, ctx.res, '/home', ctx.query)
ctx.respond = false
}
}
module.exports = home
复制代码
api.js
const Monk = require('monk')
const url = 'mongodb://localhost:27017/home'; // Connection URL
const db = Monk(url)
const dbName = 'col'
const collection = db.get(dbName)
module.exports = collection
//本地用mongdb搭建的数据库,调用方法用的monk插件,不了解的可以去github搜索
复制代码
index.js:
//VIEW
const index = require('./view/index')
const home = require('./view/home')
const editText = require('./view/editText')
const essay = require('./view/essay')
const myself = require('./view/myself')
//API
const getListInfor = require('./api/getListInfor')
const loginInfor = require('./api/loginInfor')
const POST = 'post'
const GET = 'get'
module.exports = {
view:{// 不需要请求方式
index,
home,
editText,
essay,
myself,
},
api:{
getListInfor:{
method:GET,
getListInfor
},
loginInfor:{
method:POST,
loginInfor
}
}
}
复制代码
3.router
const router = require('./node_modules/koa-router')()
const Controller = require('../controller')
const koaRoute = (app,handle) =>{ //把view层和api层挂载到router
// view
const {view,api} = Controller
for(item in view){
let _name = null;
let _moudle = null
if(item == 'index'){
_name = '/';
_moudle = view['index']
}else{
_name = '/' + item;
_moudle = view[item]
}
router.get(_name,_moudle(app))
}
//api
for(item in api){
let _method = api[item].method
let _name = '/' + item;
let _moudle = api[item][item]
router[_method](_name,_moudle(app))
}
router.get('*', async ctx => {
await handle(ctx.req, ctx.res)
ctx.respond = false
})
return router.routes() //启动路由
}
module.exports = (server,app,handle) =>{
server.use(koaRoute(app,handle))
}
复制代码
На этот раз вы можете посмотреть на то, что apps.js как введение:
const app = next({ dev })
const handle = app.getRequestHandler()
const koaRoute = require('./router')
app.prepare()
.then(() => {
const server = new Koa()
//注入路由
koaRoute(server,app,handle) // 相当于koa里面app.use(router.routes()) 启动路由......
复制代码
Продолжение. , ,
Воспроизводится в: https: //juejin.im/post/5cc7a8aaf265da03a74400a9