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

news2025/1/16 7:52:30

前端

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.coloradmin.cn/o/1608840.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Activity——绘制第一张流程图bpmn

文章目录 前言流程符号事件Event活动 Activity网关 GateWay流向 Flow 使用idea绘制第一张流程图设置流程图各节点属性流程图转换图片 问题原因与问题解决汇总问题一&#xff1a;流程乱码问题二&#xff1a;其他idea主题无左侧 Bpmn Editor 设置框问题三&#xff1a;idea右键xml…

探究欧拉恒等式的美学与数学威力

正如老子所述&#xff0c;“道生一&#xff0c;一生二&#xff0c;二生三&#xff0c;三生万物”&#xff0c;数学作为人类认知自然法则的语言&#xff0c;其数系的不断发展象征着对世界理解的深化。从自然数经由分数、无理数至复数&#xff0c;复数虽看似反直觉&#xff0c;却…

Web安全知识

第二章 虚拟机运行架构&#xff1a; 1.寄居结构 2.原生架构 软件 注&#xff1a;Hyper-V是在Windows 2008操作系统上 附录 连接FTP服务器过程&#xff1a; 1.下载了软件&#xff1a; 2.连接到ftp://10.0.105.223/服务器&#xff08;访问老师课堂资源地址&#xff09; 关闭…

恒峰智慧科技—森林防火杆:科技与环保的完美结合

在当今世界&#xff0c;我们不仅要关注人类生活的方方面面&#xff0c;也需要更加重视环境保护。尤其是在森林火灾的防范上&#xff0c;科技的应用显得尤为重要。这就是我们今天要介绍的主角——森林防火杆。 首先&#xff0c;让我们来了解一下森林防火杆的基本配置。这是一种基…

启明云端ESP32-S3+车载桥接器案例,能实现对车载产品集控

最近房车旅行很盛行&#xff0c;谁不想五一自驾游开车去外面玩&#xff1f;为了能提升用户体验&#xff0c;车企房车智能化升级越来越普遍&#xff0c;接下来小启给大家讲一个案例&#xff0c;启明云端ESP32-S3车载桥接器&#xff0c;感兴趣的可以看看。 一、ESP32-S3车载桥接器…

Mac上Maven的安装和环境变量配置保姆级教程(最新版实时更新)

目录 一、Maven的安装 1.进入官网&#xff08;Maven官网&#xff09;下载安装包并解压 2.这里我使用了Homebrew安装Maven 安装Homebrew&#xff1a; 安装Maven&#xff1a; 二、Maven配置环境变量 1.打开环境变量文档&#xff1a; 2.在弹出文档结尾加入配置&#xff1a…

安装Minitools报错_让我们手动安装 fastboot 驱动

安装Minitools报错_让我们手动安装 fastboot 驱动 求赞完整的报错信息解决办法步骤一&#xff1a;使用设备管理器手动添加硬件步骤二&#xff1a;确认驱动安装成功步骤三&#xff1a;测试驱动功能 让硬件的操作系统连接xshell 求赞 如果你是专门来找的这个报错,不是刷到的,我非…

SpringBoot 配置 jedis 来连接redis

Maven依赖 首先配置 maven依赖&#xff0c;这个依赖&#xff0c;要结合自己的springboot 的版本去选&#xff0c; 如果想要看自己的springboot 版本 在 启动类中去 加入&#xff0c;这两行代码 String version SpringBootVersion.getVersion(); log.info("***SpringBo…

websocket 连接,http 协议下用 ws, https 协议下必须要使用 wss

解决方案&#xff1a; https 相当于使用 httpssl 认证&#xff0c;使用 https 时 websocket 访问&#xff08;比如建立链接时&#xff09;必须要使用 wss。 详细解释&#xff1a; WebSocket 协议有两个主要版本&#xff1a;“ws”和“wss”。"ws"表示非加密的 Web…

前沿论文 | LLM推理性能优化最佳实践

原文&#xff1a;安全验证 - 知乎​ 来源 题目&#xff1a;LLM Inference Performance Engineering: Best Practices 地址&#xff1a;https://www.databricks.com/blog/llm-inference-performance-engineering-best-practices 在这篇博文中&#xff0c;MosaicML工程团队分析了…

潜藏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;部分乌克兰政府网络一直…

如何使用WEB前端模板

我最近想搞一搞前端&#xff0c;前端属实不太行&#xff0c;像前端搞个模板直接套一下。但是发现下载下来也有点不知道怎么用起来&#xff0c;这里我就把我的一个Bootstrap工程套用模板的具体过程记录一下。 首先创建一个前端工程&#xff0c;我这里用的是Bootstrap5&#xff…

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…

x-cmd mod | x whisper - 使用 whisper.cpp 进行本地 AI 语音识别

介绍 Whisper 模块通过 whisper.cpp 帮助用户快速将音频转换为文字。 INFO: whisper.cpp 是一个用 C/C 编写的轻量级智能语音识别库&#xff0c;是基于 OpenAI 的 Whisper 模型的移植版本&#xff0c;旨在通过深度学习模型实现音频转文字功能。 由于 whisper.cpp 目前只支持 1…

react 响应式栅格布局

遇到一个小问题 , 有很多的下拉框放在了一行的盒子里 用到了栅格思路 , 但响应式处理屏幕时候右侧的按钮会覆盖掉样式 之前我的思路是子绝父相 , 将按钮定在最右侧 , 按钮和下拉框都在同一盒子中 , 且做了栅格处理没想到还是会覆盖解决 : 后来我用到了 margin-left: auto 来让…

基于Springboot的社区待就业人员信息管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的社区待就业人员信息管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三…

Golang 采集爬虫如何配置代理 IP

在 Golang 中配置代理 IP&#xff0c;可以通过设置 http.Transport 的 Proxy 属性来实现&#xff1a; 下述代码中的 代理IP 和 端口 替换为实际的代理服务器地址和端口&#xff0c;然后运行该程序即可通过代理服务器访问对应网站。 package mainimport ("fmt""…

Maven实战—搭建微服务 Maven 工程架构

需求案例&#xff1a;搭建一个电商平台项目&#xff0c;该平台包括用户服务、订单服务、通用工具模块等。 项目架构&#xff1a; 用户服务&#xff1a;负责处理用户相关的逻辑&#xff0c;例如用户信息的管理、用户注册、登录等。订单服务&#xff1a;负责处理订单相关的逻辑…

智慧园区引领产业智能化升级:科技创新驱动打造智慧化、高效化产业新未来

随着全球科技革命的深入推进&#xff0c;以大数据、云计算、物联网、人工智能等为代表的新一代信息技术正深刻改变着传统产业的发展模式。在这一背景下&#xff0c;智慧园区作为产业智能化升级的重要载体和平台&#xff0c;正以其前瞻性的规划、创新的科技和卓越的实践&#xf…

论文精读--Learning Efficient Object Detection Models with Knowledge Distillation

在目标检测任务中&#xff0c;存在特殊的挑战&#xff1a; &#xff08;1&#xff09;目标检测任务标签信息量更大&#xff0c;根据标签学到的模型更为复杂&#xff0c;压缩后损失更多 &#xff08;2&#xff09;分类任务中&#xff0c;每个类别相对均衡&#xff0c;同等重要…