Следующая + КоА + MongoDB для создания развертывания из (а)

предисловие

Читать много статей писать на стороне сервера визуализации (next.js), но обнаружил, что сторона службы рендеринга Finder некоторые из более простого или менее систематическим, например, если вы делаете презентацию или демо еще возможно, но на практике не способствует разделению труда по применению, развернутого на линии. Очевидно, что вы можете сделать крупномасштабные проекты, но не знаете, как применять, так что принять эти болевые точки и сомнение, я решил сделать свой собственный набор следующего + коа + рамка MongoDB может быть применен к проекту проекта на уровне приложений (этот проект по-прежнему обновляется), проект по-прежнему продолжил оптимизацию, мы можем надеяться много указывающих.

Человек несколько слов сказал на карте первым начал внедрять идею планирования и проектов в рамках

проектов

Это главная страница проекта, мы должны быть в состоянии видеть это, это пародия проекта личного блога Nuggets. Содержит основной Логин, регистрация, писать статьи, чтобы показать статью. , , Последующий будет продолжать добавлять новые функции. Цель размещена на линии непрерывной итерации, зрелая и в конце концов сделала полный проект.

схема проекта

Как и традиционный SSR проект, разделенный View слой и разъединить слой, незнакомый next.js и koa.js может пойти в мозг сделать следующий документ && KOA документы , вид слой на спине просто сказать, давайте фокус говорить о создании слоя сервера, разъединить слой делятся на apps.js (файл запись app.js устаревшее), контроллер (определение интерфейса, что делает конфигурацию страницы), промежуточный слой (промежуточный слой), маршрутизатор (маршрутизация), маркер (Вход лексема определяется при регистрации)

  • 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. контроллер

КоА контроллер, который в основном в менеджере маршрутизации, в управление интерфейсом (API) и зрение управления маршрутизацией (вид) и управление базами данных (db.js), и запись файла (index.js).

апи в 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

рекомендация

отblog.csdn.net/weixin_33727510/article/details/91424077