nuxt连接mysql_nuxt+koa+mongodb项目搭建

最近搭了个nuxt+koa的前后端同构项目做性能统计用,记录一下

一、先贴出文档教程地址

二、准备好mongodb数据库

本地下载了mongodb,安装好。这步网上非常多教程。不多说。

运行mongo

sudo ./mongod

查看数据库

show dbs

admin 0.000GB

config 0.000GB

local 0.000GB

log 0.000GB

test 0.000GB

选择test数据库

use test

建一个集合perf

db.createCollection(TES)

我这还用了数据库可视化工具robo 3T,连接上数据库地址就可以直观看到数据,也可以操作,非常方便。

三、搭建

nuxt文档里很清楚,按照提示一步步来。终端信息如下。

*********$ npx create-nuxt-app perf-visualization

npx: 402 安装成功,用时 42.745 秒

> Generating Nuxt.js project in /Users/********/visualization

? Project name visualization

? Project description perf

? Use a custom server framework koa

? Use a custom UI framework none

? Choose rendering mode Universal

? Use axios module yes

? Use eslint yes

? Use prettier no

? Author name luotiantian

? Choose a package manager npm

搭建好之后的项目目录大致如下

——assets 存未编译的静态资源如 LESS、SASS 或 JavaScript

——components 组件

——layouts 全局的页面布局

——middleware 中间件

——pages 页面

——plugins 插件

——server 服务端,写koa的文件夹。

——index.js server入口文件

——static 存放应用的静态文件,不会被Webpack打包

——store 写vuex的

——util 存放一些通用方法

——nuxt.config.js nuxt配置文件

——package-lock.json

——package.json

三、服务端

1、入口index.js文件

server目录下的index.js是入口,其代码如下,主要是引入几个koa插件。

(1)koa-router 路由插件

(2)koa-bodyparser 处理post请求

(3)monk 连接mongo

(4)koa-cors 解决跨域

(5)koa-convert 兼容低版本koa插件

const Koa = require('koa')

const consola = require('consola')

const { Nuxt, Builder } = require('nuxt')

const router = require('koa-router')()

const bodyParser = require('koa-bodyparser')

const Monk = require('monk')

const cors = require('koa-cors');

const convert = require('koa-convert')

const api = require('./routes/api');

const app = new Koa()

// 进行requestbody解析

app.use(bodyParser())

// 加入路由

app.use(router.routes())

// 处理跨域

app.use(convert(cors()))

// 路由处理,在api中

app.use(api.routes(), api.allowedMethods())

const host = process.env.HOST || '**.**.**.134'

const port = process.env.PORT || 3000

// Import and Set Nuxt.js options

let config = require('../nuxt.config.js')

config.dev = !(app.env === 'production')

async function start() {

// Instantiate nuxt.js

const nuxt = new Nuxt(config)

// Build in development

if (config.dev) {

const builder = new Builder(nuxt)

await builder.build()

}

app.use(ctx => {

ctx.status = 200 // koa defaults to 404 when it sees that status is unset

return new Promise((resolve, reject) => {

ctx.res.on('close', resolve)

ctx.res.on('finish', resolve)

nuxt.render(ctx.req, ctx.res, promise => {

// nuxt.render passes a rejected promise into callback on error.

promise.then(resolve).catch(reject)

})

})

})

app.listen(port, host)

consola.ready({

message: `Server listening on http://${host}:${port}`,

badge: true

})

}

start()

2、模块化路由

server文件夹下新建2个文件夹

——server 服务端,写koa的文件夹。

——controller 不同模块的操作(接口返回数据)

——perf.js 性能数据存取接口的具体操作

——routes 路由文件

——api.js

——index.js server入口文件

api.js代码如下

const router = require('koa-router')();

const perf = require('../controller/perf');

router.prefix('/api');

/*保存perfData接口*/

router.post('/savePerf', perf.savePerf);

/*获取perfData接口*/

router.get('/getPerf', perf.getPerf);

/*获取分类接口*/

router.get('/getCategory', perf.getCategory);

module.exports = router

perf.js代码如下

const Koa = require('koa')

const router = require('koa-router')()

const Monk = require('monk')

// 存性能数据

const savePerf = async (ctx) => {

try {

const db= Monk('localhost/test');//链接到库

const perf = db.get('perf');//表

const perfData = Object.assign(ctx.request.query,{saveTime: new Date()})

perf.insert({"perfTest": perfData})

console.log('post perf.....',perfData)

ctx.status = 200

ctx.body = JSON.stringify({status:0})

} catch (error) {

ctx.body = {

error:1,

info:error

}

}

}

// 取性能数据

const getPerf = async (ctx) => {

try {

const db= Monk('localhost/test');//链接到库

const perf = db.get('test');//表

ctx.status = 200

let path = ctx.params.id

console.log('get ctx.req', ctx.request.query)

let st = await perf.find({"perfTest.path": ctx.request.query.path}, {_id:false});

const data = [...st]

ctx.body = JSON.stringify({status: 0, data})

} catch (error) {

ctx.body = {

error:1,

info:error

}

}

}

// 取页面分类

const getCategory = async (ctx) => {

try {

const db= Monk('localhost/test');//链接到库

const perf = db.get('ltt');//表

ctx.status = 200

let all = await perf.find({},{_id:false});

let cate = []

all.forEach((item, index) => {

if(!cate.includes(item.perfTest.path) && item.perfTest.path) {

cate.push(item.perfTest.path)

}

});

const data = [...cate]

ctx.body = JSON.stringify({status: 0, data})

} catch (error) {

ctx.body = {

error:1,

info:error

}

}

}

module.exports = {

savePerf,

getPerf,

getCategory

}

四、页面请求

因为还在本地,所以页面上请求的接口是本地ip

this.$axios.$get('http://**.**.*.134:3000/api/getCategory', {}).then((res) => {

if(res.status === 0) {

this.paths = res.data

}

})

五、待琢磨

nuxt2.0带的是webpack4.0,nuxt.config.js里配置(vendor)不太一样。

你可能感兴趣的:(nuxt连接mysql)