【享你所想】Nodejs+koa+vue 博客系统开发教程+源码

项目初始化 

1、首先 安装git  初始化项目 git init

项目搭建

2、安装koa;命令:npm install koa

#################################

3、 安装重启服务工具 命令 npm install nodemon

编写脚本:

"scripts": {

    "dev": "nodemon ./src/main.js",

    "test": "echo \"Error: no test specified\" && exit 1"

  },

 接下来可以执行 npm run dev     热更新部署

项目的基本优化

 4、读取配置文件的资源工具:安装 dotenv   命令:npm install dotenv

const dotenv =require('dotenv')

dotenv.config()

console.log("端口=",process.env.APP_PORT)

module.exports = process.env

 改写main.js文件,使得配置文件生效

const Koa =require('koa')
const {APP_PORT} =require('./config/default')
const app = new Koa()
console.log("APP_PORT=",APP_PORT)
//中间件
app.use((ctx,next)=>{

    ctx.body='Hello api'
})
app.listen(APP_PORT,()=>{

    console.log(`server is running on http://localhost:${APP_PORT}`)
})

添加路由

根据不同的url,调用不同的处理函数

 1、首先安装koa-router,命令:npm i koa-router

实现的步骤:

     a、导入router包;

     b、实例化router;

     c、 编写路由;

     d、注册中间件。

//导入路由组件
const Router =require('koa-router')

//实例化组件
const indexRouter = new Router()
//编写路由
indexRouter.get('/',(ctx,next)=>{
    ctx.body ="hello koa-router"
})
adminRouter.get('/admin',(ctx,next)=>{
    ctx.body ="hello koa-router-admin"
})
console.log("APP_PORT=",APP_PORT)
//注册中间件
app.use(indexRouter.routes())
app.use(adminRouter.routes())

目录结构优化

注意:router组件可以抽取到独立的文件router中,业务相关的又可以抽取到文件app中;使得系统更加具有结构性。

 

控制器请求业务

使用中间件koa-body,安装命令:npm i koa-body 功能:解析body

 

 注册中间件 koa-body  改写 app/index.js文件

const Koa =require('koa')
const { koaBody } = require('koa-body')
const indexRouter =require('../router/admin')

const app = new Koa()

app.use(
    koaBody({
        multipart: true,    //解析多个文件
        formidable: {
            maxFileSize: 100 * 1024 * 1024,    // 设置上传文件大小最大限制,默认2M
            //uploadDir: 可以填写一个路径,不填写默认为 os.tmpDir()
        }
    })
)

 解析请求的数据

    async register(ctx,next){
        
        const {username,password} = ctx.query
        console.log("参数1:",JSON.stringify(ctx.query))
        const ret =await createUser(username,password)
        console.log("返回",ret)
        ctx.body=ret
    }

 拆分Service层,主要做数据库处理业务 创建 service/AdminService.js文件

class AdminService
{
    async createUser(username,password){
     //todo 写入数据库
     return "ok"
    }
}
module.exports =new AdminService()

 数据库操作

 主要依赖Sequelize实现数据库的操作

 

Sequelize的安装

 连接数据库(MYSQL5.7)

const {Sequelize} =require('sequelize')

//数据库配置
const seqConnect =new Sequelize('nodejs','root','123456',{

   host:'192.168.31.147',
   port:'3306',
   dialect:'mysql'
})
//测试连接
seqConnect.authenticate().then(()=>{

    console.log("mysql service connect success!")
}).catch(err=>{

    console.log(`mysql service connect error!,${err}`)

})

module.exports =seqConnect

 模型基础(使用sequelize.define)

const {DataTypes}  = require('sequelize')

const seqConnect =require('../db/database')

//创建模型Admin
const Admin =seqConnect.define('admin',{
//id 不用手动创建
 username:{
    type:DataTypes.STRING,
    allowNull:false,
    unique:true,
    comment:'用户名'
 },
password:{
    type:DataTypes.CHAR(64),
    allowNull:false,
    comment:'密码'
 },
 is_admin:{
    type:DataTypes.BOOLEAN,
    defaultValue:0,
    allowNull:false,
    comment:'1:管理员;0:一般用户'
 }
},{
    timestamps:false //创建表的时候不会自动添加创建时间和更新时间的字段
})
Admin.sync({force:true}) //创建后注释掉,不然下次执行会删除之前的表重新创建,数据会清空

密码加密 加密方式(bcryptjs)

 安装命令:npm i bcryptjs

//注册时候密码加密
const cryptPassword= async (ctx,next)=>{
    const {password} =ctx.query
    
    const salt =bcrypt.genSaltSync(10)
    const hash =bcrypt.hashSync(password,salt) //密文
    ctx.query.password=hash
    await next()
}

页面截图:

源码已经上传到git:https://gitcode.net/weixin_38221772/nodejs-koa-vue.git

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

classBao-cn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值