Node.JS后端开发笔记整理(简洁版)

前端

1. 开发环境和技术栈

  • 开发工具:Visual Studio Code
  • Node.js版本:18.19.0(建议保持在18+)
  • 包管理器:npm
  • 前端框架:Vue3.4
  • 脚本语言:TypeScript
  • 构建工具:Vite
  • 后端框架:Express(基于 Node.js 平台,快速、开放、极简的 Web 开发框架)
  • 数据访问:MySQL

2. 表设计分析

在这里插入图片描述

3. 建库建表

在这里插入图片描述

4. 使用 Vite 构建 Vue3+TS项目

npm create vite zhaoxi_book_web

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5. 目录结构

在这里插入图片描述

6. 修改 Vite 配置文件

  1. 设置项目启动后默认打开浏览器
  2. 设置IP
  3. 设置端口

```go
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [vue()],
  server: {
    // 启动后打开浏览器
    open: true,
    // 主机
    host: '127.0.0.1',
    // 端口
    port:3001
  }
})

在这里插入图片描述

7. Element Plus 介绍

基于 Vue3,面向设计师和开发者的组件库

7.1 安装

npm install element-plus

7.2 导入

  • main.ts 文件
import { createApp } from 'vue'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import './style.css'
import App from './App.vue'

const app = createApp(App)
app.use(ElementPlus)
app.mount('#app')

接下来就可以使用 Element 组件了

后端 + 数据库

1. Node.js 项目初始化

npm init

在这里插入图片描述

2. Express 介绍和安装

npm install express

在这里插入图片描述
拓展:为了解决Express中的异步问题,后来又出现了 下一代web框架koa

npm install koa@2.0.0
// 导入koa,和koa 1.x不同,在koa2中,我们导入的是一个class,因此用大写的Koa表示:
const Koa = require('koa');

// 创建一个Koa对象表示web app本身:
const app = new Koa();

// 对于任何请求,app将调用该异步函数处理请求:
app.use(async (ctx, next) => {
    await next();
    ctx.response.type = 'text/html';
    ctx.response.body = '<h1>Hello, koa2!</h1>';
});

// 在端口3000监听:
app.listen(3000);
console.log('app started at port 3000...');

还可以直接用命令node app.js在命令行启动程序,或者用npm start启动。npm start命令会让npm执行定义在package.json文件中的start对应命令:

"scripts": {
    "start": "node app.js"
}

3. 配置以及启动 http 服务

  • 新建 app.js 文件
const express = require('express')
const app = express()
const port = 3000
app.get('/', (req, res) => {
    res.send('Hello World!')
})
app.listen(port, () => {
    console.log(`Example app liistening on port ${port}`);
})
  • 启动:命令行窗口中输入 node app.js 即可启动
  • 地址栏输入 localhost:3000,页面如下
    在这里插入图片描述

4. 安装和访问 MySQL

4.1 安装

npm install mysql

4.2 配置读取文件

  • 新建config.js文件
const configs = {
    mysql: {
        host: 'localhost',
        user: 'dbuser',
        password: 'password',
        database:'my_db'
    }
}
module.exports = configs

4.3 访问 MySQL

  • app.js 文件中进行访问 MySQL
const express = require('express')
const app = express()
const port = 3000
app.get('/', (req, res) => {
    res.send('Hello World!')
})

// 导入配置信息
const configs = require('./config')
var mysql = require('mysql')
var connection = mysql.createConnection(configs.mysql)
// 打开连接
connection.connect()
// 执行SQL
connection.query('SELECT 1 + 1 AS solution', function (ree, rows, fields) {
    if (err) throw err
    console.log('The solution is:',rows[0].solution)
})
// 关闭连接
connection.end()


app.listen(port, () => {
    console.log(`Example app liistening on port ${port}`);
})

5. 接口实现

// 做参数解析用
npm install body-parser
  • app.js 文件中
const express = require('express')
var bodyParser = require('body-parser')
const app = express()
// 解析应用程序 /x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))
// 解析 application/json
app.use(bodyParser.json())
const port = 3000
app.get('/', (req, res) => {
    res.send('Hello World!')
})

// 导入配置信息
const configs = require('./config')
var mysql = require('mysql')
var connection = mysql.createConnection(configs.mysql)
// get 请求,返回json格式list数据
app.get('/get', (req, res) => {
    let sql = `SELECT * FROM Book`;
    if (req.query.BookName) {
        sql = `SELECT * FROM BooK WHERE BookName LIKE '%${req.query.BookName}%'`
    }
    connection.query(sql, (err, rows) => {
        if (!err) {
            res.send(rows)
        } else {
            res.send(err)
        }
    })
})
// add
app.post('/add', (req, res) => {
    let sql = `
        INSERT INFO BooK(BookName,Author,TypeName,Remarks)
        Values('${req.body.BookName}','${req.body.Author}','${req.body.TypeName}','${req.body.Remarks}')
    `;
    connection.query(sql, (err, rows) => {
        if (!err) {
            res.send('操作成功!')
        } else {
            res.send(err)
        }
    })
})
// edit
app.post('/edit', (req, res) => {
    let sql = `
        UPDATE BooK SET
        BookName = '${req.body.BookName}',
        Author = '${req.body.Author}',
        TypeName = '${req.body.TypeName}',
        Remarks = '${req.body.Remarks}';`;
    connection.query(sql, (err, rows) => {
        if (!err) {
            res.send('操作成功!')
        } else {
            res.send(err)
        }
    })
})
// delete
app.get('/delete', (req, res) => {
    let sql = `DELETE FROM BooK WHERE ID=${req.query.Id};`
    connection.query(sql, (err, rows) => {
        if (!err) {
            res.send('操作成功')
        } else {
            res.send(err)
        }
    })
})
app.listen(port, () => {
    console.log(`Example app liistening on port ${port}`);
})

前后端联调

针对以上接口我们要在前端进行调用

npm install axios
const get = (BookName: string) => {
    return axios.get(`/api/get?BookName=${BookName}`)
}
const add = (req: {}) => {
    return axios.post('/api/add',req)
}
const edit = (req: {}) => {
    return axios.post('/api/edit',req)
}
const delete = (id: string) => {
    return axios.get(`/api/delete?Id=${id}`)
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/558436.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Django项目使用uwsgi+nginx部署上线

Django项目使用uwsginginx部署上线 前言settings 配置安装uwsgi 和配置uwsgi推荐配置文件启用wsgi不使用nginx的配置&#xff08;不推荐&#xff09;使用nginx的配置 安装 nginx和配置niginx 配置 运行参考资料 前言 代码已经开发完成&#xff0c;正式部署上线 settings 配置…

视频教程下载:用ChatGPT玩转海外抖音TikTok

CHATGPT for TikTok是一门前沿课程&#xff0c;旨在帮助您充分发挥TikTok广告活动的全部潜力。随着数字营销的爆炸性增长&#xff0c;企业需要使用先进的工具来保持竞争优势。在这门课程中&#xff0c;您将学习如何利用CHATGPT——一种先进的人工智能工具——来创建与目标受众产…

潜藏10年的恶意软件被发现;利用漏洞在K8S上挖矿;AWS、Google和Azure 出现信息泄露危机 | 安全周报0419

关键词&#xff1a;OfflRouter、恶意软件、VBA宏病毒、机密文件、可执行文件、iOS间谍软件、LightSpy、F_Warehouse、Azure CLI、AWS CLI、Google Cloud CLI 1. 近十年来&#xff0c;OfflRouter恶意软件在乌克兰一直未被发现 自2015年以来&#xff0c;部分乌克兰政府网络一直…

【软考】软件设计师中级

视频课 计算机组成原理 进制转换 定点数vs浮点数 校验码 计算机体系结构 指令系统 I/O 存储系统 直接映射&#xff1a;简单粗暴的死板派 全相联映射&#xff1a;跳脱的自由发挥派 组相联映射&#xff1a;折中派&#xff0c;组间直接映射&组内全相联映射 命中率&#xf…

你的mongodb客户端是哪个呢?

MongoDB 是一种流行的文档数据库&#xff0c;它可以支持多种场景和应用。有很多客户端工具可以用来管理和操作 MongoDB&#xff0c;以下是一些常用的工具&#xff0c;以及它们的介绍&#xff1a; 一、MongoDB Shell MongoDB Shell 是连接&#xff08;和使用&#xff09;MongoD…

【银角大王——Django课程Day1】

Django框架第一课 安装Django框架方式一&#xff08;命令行的形式创建Django项目&#xff09;方式二&#xff08;适合企业版的pycharm&#xff09;默认文件介绍app文件介绍快速上手我的导包一直爆红是因为我没使用解释器&#xff0c;没导入包&#xff0c;去设置里面导入包即可—…

(保姆级教学)跨站请求伪造漏洞

1. CSRF漏洞 CSRF&#xff08;Cross-site request forgery&#xff09;跨站请求伪造&#xff0c;也被称为One Click Attack 或者Session Riding&#xff0c;通常缩写为CSRF或者XSRF&#xff0c;是一种对网站的恶意利用。尽管听起来像跨站脚本&#xff08;XSS&#xff09;&…

【银角大王———Django学习DAY0——基础准备】

银角大王——Django学习前情提要 &#xff08;1&#xff09;在pycharm中下载Flask&#xff08;2&#xff09;使用Flask&#xff08;3&#xff09;下载BootStrap框架&#xff08;4&#xff09; 使用BootStrap框架 &#xff08;1&#xff09;在pycharm中下载Flask 在设置——项目…

搭建sql-lab出现的php不兼容

下载不了的时候&#xff0c;直接打开该网址下载5.xphp版本&#xff0c;解压到C:\php_studyv8\phpstudy\phpstudy_pro\Extensions\php&#xff08;可能路径都不一样&#xff0c;找到Extensions\php放到该目录下&#xff09;

element table加减列

// 有个特别注意的地方,下面这行代码,key一定绑的是item,千万不要绑定index,不然就会出现异常 //<el-table-column v-for"(item,index) in titleList" :key"item" min-width"150" align"center"><el-table fit :data"d…

微信小程序酒店选择日期和入住人数(有效果图)

效果图 app.vue onLaunch:function(options){this.defaultcache()}defaultcache(){// 入住信息缓存var arr this.getDateTime();var ReserVation {reservType:0,//1 人数 2日期InCheckin:{},//入离日期peopleArr:[{title:成人,num:2},{title:儿童,num:0},{title:宝子,num:1…

【C语言__动态内存管理__复习篇6】

目录 前言 一、动态内存管理 二、动态内存函数 2.1 malloc 2.2 free 2.3 calloc 2.4 realloc 三、动态内存常见的6个使用错误 3.1 接收malloc/calloc返回的参数后未及时检查是否为NULL 3.2 越界访问动态内存空间 3.3 对非动态开辟的内存使用free释放 3.4 使用free只释放了…

【GoWeb框架初探——GRPC】

1. GRPC介绍 1.1 什么是RPC RPC全程是Remote Procedure Call&#xff0c;远程过程调用。这是一种协议&#xff0c;是用来屏蔽分布式计算中的各种调用细节&#xff0c;使得你可以像是本地调用一样直接调用一个远程的函数。 调用流程 1&#xff09;客户端发送数据&#xff08;…

flutter 谷歌的苹果系统消息推送

flutter firebase 云消息通知教程 (android-安卓、ios-苹果) Android、ReactNative、Flutter集成Firebase推送注意事项 Android&#xff1a;Firebase 凭据 iOS&#xff1a;基于 p8 令牌的 APN 连接 iOS&#xff1a;p12 生成证书 Flutter之对接国外推送onesignal踩坑笔记&a…

基于SSM的平面设计课程在线学习平台系统(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的平面设计课程在线学习平台系统&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;…

C++:STL-list模拟实现:迭代器的封装

STL-list模拟实现细节 一. 模拟实现的思想细节1.迭代器实现&#xff1a;用类进行封装2.和--的重载3.奇怪的->重载4.const迭代器 二.实现源码 一. 模拟实现的思想细节 1.迭代器实现&#xff1a;用类进行封装 为什么不使用原生指针&#xff1a; ​ 相比于vector和string&am…

9.Godot数组|遍历|静态变量|对象|调试

数组和字典的遍历 数组的概念 数组是一组数据的集合。在程序中负责批量处理数据。数组中的元素可以包括各个类型的数据&#xff0c;也可以对数组内数据类型进行限定。可以通过 数组名【数字】 的形式来访问数组元素&#xff0c;数字 0 代表数组的第一个元素。数组可以通过调用…

《中学科技》是什么级别的刊物?如何投稿?

《中学科技》是什么级别的刊物&#xff1f;如何投稿&#xff1f; 《中学科技》创刊于1976年&#xff0c;由上海世纪出版&#xff08;集团&#xff09;有限公司主管&#xff0c;上海科技教育出版社有限公司主办的省级学术期刊&#xff0c;《中学科技》以传播科技知识、启迪智慧…

蓝桥杯2024年第十五届省赛真题-宝石组合

思路&#xff1a;参考博客&#xff0c;对Ha,Hb,Hc分别进行质因数分解会发现&#xff0c;S其实就等于Ha&#xff0c;Hb&#xff0c;Hc的最大公约数&#xff0c;不严谨推导过程如下&#xff08;字丑勿喷&#xff09;&#xff1a; 找到此规律后&#xff0c;也不能枚举Ha&#xff…

AI容器化部署开发尝试 (一)(Pycharm连接docker,并部署django测试)

注意&#xff1a;从 Docker 19.03 开始&#xff0c;Docker 引入了对 NVIDIA GPU 的原生支持&#xff0c;因此若AI要调用GPU算力的话docker版本也是有要求的&#xff0c;后面博客测试。 当然本篇博客还没设计到GPU的调用&#xff0c;主要Pycharm加Anaconda的方案用习惯了&#…
最新文章