IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 【全栈系列教程】node + React 记账本项目(待完成...) -> 正文阅读

[JavaScript知识库]【全栈系列教程】node + React 记账本项目(待完成...)

1. 起步

纯讲理论知识大家可能会觉得很枯燥乏味,所以我个人习惯采用代码结合理论的形式为大家阐述 Egg 的一些关键知识点。

Egg 的环境要求:Node >= 8.x,npm >= 6.1.0。

这里我们使用 Egg 为我们提供的脚手架生成指令,几行代码就能初始化一个 Egg 项目,如下:

$ mkdir egg
$ cd egg
$ npm init egg --type=simple
$ yarn 或者 npm i

注意: 这里不用npm的原因是npm install 会出现一些奇奇怪怪的问题,一路按回车就可以了。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FmNLJzZU-1647254733137)(C:\Users\dualseason\Desktop\node全栈掘金记账本.assets\1647231464229.png)]

我们来看一下egg项目的目录,和 Java 的MVC架构差不多,controller是控制层、service是业务层。

app
	controller
		home.js
	router.js
config
	config.default.js
	plugin.js

router.js

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8bwbKX28-1647254733138)(C:\Users\dualseason\Desktop\node全栈掘金记账本.assets\1647234001026.png)]

上面代码是监听路径/,访问/后会调用controller.home.index的方法,如下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R7tUOcyo-1647254733139)(C:\Users\dualseason\Desktop\node全栈掘金记账本.assets\1647234033705.png)]

ctx.body就是返回的JSON对象,我们启动代码看看

$ yarn run dev

访问localhost:7001

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EVWwt1Hp-1647254733140)(C:\Users\dualseason\Desktop\node全栈掘金记账本.assets\1647235074322.png)]

2. 连接mysql数据库

$ yarn add egg-mysql

config/plugin.js 添加插件配置:

'use strict';

/** @type Egg.EggPlugin */
module.exports = {
  mysql: {
    enable: true,
    package: 'egg-mysql'
  }
};
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cUZkVhdo-1647254733142)(C:\Users\dualseason\Desktop\node全栈掘金记账本.assets\1647236248437.png)]

config/config.default.js,添加 mysql 连接配置项和 安全威胁 csrf 的防范

config.mysql = {
  // 单数据库信息配置
  client: {
    // host
    host: 'localhost',
    // 端口号
    port: '3306',
    // 用户名
    user: 'root',
    // 密码
    password: '数据库密码', // 初始化密码,没设置的可以不写
    // 数据库名
    database: 'test', // 我们新建的数据库名称
  },
  // 是否加载到 app 上,默认开启
  app: true,
  // 是否加载到 agent 上,默认关闭
  agent: false,
};

config.security = {
    csrf: {
      enable: false,
      ignoreJSON: true
    },
    domainWhiteList: [ '*' ], // 配置白名单
};
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vmnk7Iwu-1647254733145)(C:\Users\dualseason\Desktop\node全栈掘金记账本.assets\1647236525140.png)]
  1. 查询用户(注意添加顺序,先service层后controller层,最后添加路由,否则会找不到对应的路径报错)
// 在service/home.js添加
async user() {
    const { ctx, app } = this;
    let sql = `select id,name from test`;
    try {
        const result = await app.mysql.query(sql);
        return result;
    } catch (e) {
        console.log(e);
        return null;
    }
}
// 在controller/home.js添加
async user() {
    const { ctx } = this;
    const result = await ctx.service.home.user();
    ctx.body = result;
}
// 在router.js
router.get('/user', controller.home.user);
  1. 增加用户
async addUser(name) {
    const { ctx, app } = this;
    try {
        const result = await app.mysql.insert('test', { name });
        return result;
    } catch (e) {
        console.log(e);
        return null;
    }
}
async addUser() {
    const { ctx } = this;
    const { name } = ctx.request.body;
    try {
        const result = await ctx.service.home.addUser(name);
        ctx.body = {
            code: 200,
            msg: '添加成功',
            data: null
        }
    } catch (error) {
        ctx.body = {
            code: 500,
            msg: '添加失败',
            data: null
        }
    }
}
router.post('/add-user', controller.home.addUser);
  1. 修改用户
async editUser(id, name) {
    const { ctx, app } = this;
    try {
        let result = await app.mysql.update('test', { name }, {
            where: {
                id
            }
        });
        return result;
    } catch (error) {
        console.log(error);
        return null;
    }
}
async editUser() {
    const { ctx } = this;
    const { id, name } = ctx.request.body;
    try {
        const result = await ctx.service.home.editUser(id, name);
        ctx.body = {
            code: 200,
            msg: '修改成功',
            data: null
        }
    } catch (error) {
        ctx.body = {
            code: 500,
            msg: '修改失败',
            data: null
        }
    }
}
router.post('/edit-user', controller.home.editUser);
  1. 删除用户
async deleteUser(id) {
    const { ctx, app } = this;
    try {
        let result = await app.mysql.delete('test', { id });
        return result;
    } catch (error) {
        console.log(error);
        return null;
    }
}
async deleteUser() {
    const { ctx } = this;
    const { id } = ctx.request.body;
    try {
        const result = await ctx.service.home.deleteUser(id);
        ctx.body = {
            code: 200,
            msg: '删除成功',
            data: null
        }
    } catch (error) {
        ctx.body = {
            code: 500,
            msg: '删除失败',
            data: null
        }
    }
}
router.post('/delete-user', controller.home.deleteUser);
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VIVeEgPC-1647254733146)(C:\Users\dualseason\Desktop\node全栈掘金记账本.assets\1647245389056.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gEZBRCUR-1647254733147)(C:\Users\dualseason\Desktop\node全栈掘金记账本.assets\1647245403788.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6U3bg6fK-1647254733148)(C:\Users\dualseason\Desktop\node全栈掘金记账本.assets\1647245362760.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3CODOqPI-1647254733150)(C:\Users\dualseason\Desktop\node全栈掘金记账本.assets\1647245415589.png)]
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-15 22:23:40  更:2022-03-15 22:25:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:40:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码