当前位置: 首页 > news >正文

Node的学习以及学习通过Node书写接口并简单操作数据库

Node的学习

  • Node的基础
  • 上述是关于Node的一些基础,总结的还行;

利用Node书写接口并操作数据库

1. 初始化项目

  • 创建新的项目文件夹,并初始化 package.json
mkdir my-backend
cd my-backend
npm init -y

2. 安装必要的依赖

  • 安装Express.js(用于处理http请求)
npm install express
  • 安装CORS,支持跨域请求
npm install cors
  • 安装nodemon,使用开发模式(自动重启服务); s
npm install --save-dev nodemon

3. 创建主程序文件index.js

const db = require('./db'); // 有几个常用的操作路径的方式需要注意;// 引入必要模块
const express = require('express');
const cors = require('cors');const app = express(); // 创建 Express 应用实例
const PORT = 3000; // 设置服务端口// 中间件配置
app.use(cors()); // 允许跨域
app.use(express.json()); // 解析 JSON 格式的请求体
app.use(express.urlencoded({ extended: true })); // 解析 URL 编码的请求体// 路由
app.get('/', (req, res) => {res.send('Hello, World! Welcome to the Node.js backend!');
});app.post('/data', (req, res) => {const { name, age } = req.body; // 从请求体中获取数据res.json({ message: `Received data for ${name}, age ${age}` });
});/***  扩展功能:1. 增加更多路由;或者说查询路由*/
app.get('/users', (req, res) => {db.query('SELECT * FROM users', (err, results) => {if (err) {res.status(500).json({ error: 'Database query failed' });return;}res.json(results);});
});// 2. 插入用户数据
app.post('/addUser', (req, res) => {// const { id, username, password } = req.body;db.query('INSERT INTO users (id, username, password) VALUES (?, ?, ?)', [id, username, password], (err, result) => {if (err) {res.status(500).json({ error: 'Failed to insert user' });return;}res.json({ message: 'User created successfully', userId: result.insertId });});
})// post请求一般都会解析用户数据;
app.post('/users', (req, res) => {const { name } = req.body;res.json({ message: `User ${name} created successfully!` });
});// 启动服务
app.listen(PORT, () => {console.log(`Server is running on http://localhost:${PORT}`);
});

4. 主程序中连接数据库操作

  • 安装数据库
npm install mongoose    # MongoDB
npm install mysql2      # MySQL
  • 连接数据库 db.js
const mysql = require('mysql2');// 创建数据库连接
const db = mysql.createConnection({host: 'localhost',user: 'root',password: '123456',database: 'my_db_01'
});// 连接数据库
db.connect((err) => {if (err) {console.error('Error connecting to the database:', err);return;}console.log('Connected to MySQL database.');
});module.exports = db; // 导出数据库连接实例

5. 运行服务器

npx nodemon index.js
  • 结果图
    表示成功连接上数据库

6. 测试

get接口方法测试
  • 在浏览器测试; 输入:http://localhost:3000/users
    在这里插入图片描述
  • postman测试
    postman测试结果图
post接口方法测试

在这里插入图片描述

  • 在发送请求以后,即可在数据库中查看到新添加的数据新添加的数据

Node项目的规范化

  • 上面的Node项目已经可以完成一个较为试水的项目了,但是项目结构需要优化下:
    Node项目结构规范
  • 将原先写在app.js(index.js)中的路由信息分开写,分为users.js和students.js
  • 以users.js为例,其路由信息的js书写如下:
// 用户路由
const express = require('express'); 
const router = express.Router(); 
const db = require('../db');  // 引入数据库配置信息// 获取所有用户数据
router.get('/users', (req, res) => {db.query('SELECT * FROM users', (err, results) => {if (err) {res.status(500).json({ error: 'Database query failed' });return;}res.json(results);});});// 添加用户信息
router.post('/addUser', (req, res) => {const { id, username, password } = req.body;db.query('INSERT INTO users (id, username, password) VALUES (?, ?, ?)', [id, username, password], (err, result) => {if (err) {res.status(500).json({ error: 'Failed to insert user' });return;}res.json({ message: 'User created successfully', userId: result.insertId });});})module.exports = router; 
  • 添加到app.js的路由书写如下:
// app.js 作为入口文件;const express = require('express');
const cors = require('cors');
const userRoutes = require('./routes/users'); // 引入用户路由
const studentsRoutes = require('./routes/students'); // 引入学生路由const app = express(); 
const PORT = 3000; // 中间件配置
app.use(cors()); // 允许跨域
app.use(express.json()); // 处理JSON格式
app.use(express.urlencoded({ extended: true })); // 处理URL编码// 基础路由
app.get('/', (req, res) => {res.send('Hello, World! Welcome to the Node.js backend!');
});// 使用路由模块
app.use('/api', userRoutes); // 将用户相关路由挂载到/api中;
app.use('/api', studentsRoutes); // 启动服务
app.listen(PORT, () => {console.log(`Server is running on http://localhost:${PORT}`);
});
  • 问题:为什么使用路由模块需要将用户相关路由挂载到 /apo中,而不是直接/ 呢
      1. RESTful风格标准(现代web开发的一种标准)
      1. 防止命名冲突,如果项目中没有统一前缀,路由很容易与其他资源冲突**
      1. 前端调用时的统一管理,有利于集中管理API

http://www.mrgr.cn/news/80441.html

相关文章:

  • 试题转excel;word转excel;大风车excel
  • 百度智能云千帆AppBuilder升级,百度AI搜索组件上线,RAG支持无限容量向量存储!
  • 恢复删除的文件:6个免费Windows电脑数据恢复软件
  • 【OSS】php使用oss存储
  • Visual Studio 玩转 IntelliCode AI辅助开发
  • Python面试常见问题及答案5
  • 概率论得学习和整理22:EXCEL数据清洗的几个功能总结备忘
  • NVM:安装配置使用(详细教程)
  • 代码审计之Fastjson利用链
  • jenkins pipeline打包流程
  • LWIP协议:三次握手和四次挥手、TCP/IP模型
  • Qt WORD/PDF(一)使用 QtPdfium库实现 PDF 预览
  • 音频进阶学习八——傅里叶变换的介绍
  • uniapp/HBuilder X引入weex报错weex is not defined
  • 3.1 角度
  • 【自动控制原理】学习地图
  • WES7汉化教程
  • 02、10个富士胶片模拟的设置
  • fabric.js
  • 【时间序列分析】斯皮尔曼(Spearman)相关系数理论基础及python代码实现
  • 【图像配准】方法总结
  • hive—炸裂函数explode/posexplode
  • 【漫话机器学习系列】010.Bagging算法(Bootstrap Aggregating)
  • 循环神经网络RNN笔记
  • LeetCode1.两数之和(超简单讲解)
  • 医疗领域的网络安全预防:保障患者隐私与医疗数据安全