Node.js 入门全攻略:从安装到 Express 框架与数据库操作(含案例详解)

一、引言

Node.js 是一个强大的 JavaScript 运行环境,允许开发者在服务器端使用 JavaScript 进行编程。它具有高并发、高效的特点,广泛应用于 Web 开发、命令行工具等领域。本文将带您深入了解 Node.js 的安装、基本概念、文件操作、数据库操作以及使用 Express 框架的方法。

二、Node.js 的安装

  1. 访问 Node.js 官方网站(Node.js — Run JavaScript Everywhere)。
  2. 选择 “LTS”(长期支持)版本,下载适合您操作系统的安装包。
  3. 按照安装向导进行安装。安装完成后,在命令行中输入以下命令检查安装是否成功:
   node -vnpm -v

如果能正确显示 Node.js 和 npm(Node.js 的包管理器)的版本号,则说明安装成功。

三、Node.js 的基本概念

1.模块系统

  • Node.js 使用 CommonJS 模块规范,可将代码分割成多个模块,便于组织和管理。
  • 通过 require() 函数引入其他模块,使用 module.exports 或 exports 对象导出模块功能。
  • 例如:
   // math.jsfunction add(a, b) {return a + b;}function subtract(a, b) {return a - b;}module.exports = {add,subtract};
   // 引入模块const math = require('./math');console.log(math.add(5, 3)); // 输出 8console.log(math.subtract(10, 4)); // 输出 6

2.事件驱动和异步编程

  • Node.js 是事件驱动的,采用异步编程模型处理 I/O 操作,避免阻塞主线程,提高性能和响应速度。
  • 可使用回调函数、Promise 或 async/await 处理异步操作结果。
  • 回调函数读取文件示例:
   const fs = require('fs');fs.readFile('example.txt', 'utf8', (err, data) => {if (err) {console.error(err);} else {console.log(data);}});

Promise 读取文件示例:

   const fs = require('fs').promises;fs.readFile('example.txt', 'utf8').then(data => console.log(data)).catch(err => console.error(err));

async/await 读取文件示例:

   const fs = require('fs').promises;async function readFileAsync() {try {const data = await fs.readFile('example.txt', 'utf8');console.log(data);} catch (err) {console.error(err);}}readFileAsync();

四、使用 npm 管理项目依赖

  1. npm 是 Node.js 的包管理器,可轻松安装、管理和共享第三方模块。
  2. 在项目目录中使用 npm init 命令初始化项目,生成 package.json 文件记录项目信息和依赖。
  3. 使用 npm install 命令安装模块,如 npm install express。安装后模块存于 node_modules 目录,并在 package.json 中添加依赖信息。
  4. 使用 npm install --save-dev 安装开发依赖,仅在开发过程中使用,不部署到生产环境。

五、创建简单的 Node.js 应用

      1.创建新目录,在其中创建 app.js 文件。

      2.编写以下代码:

   const http = require('http');const server = http.createServer((req, res) => {res.writeHead(200, { 'Content-Type': 'text/plain' });res.end('Hello, Node.js!');});const port = 3000;server.listen(port, () => {console.log(`Server running at port ${port}`);});

      3.在命令行中进入项目目录,运行 node app.js 启动服务器。

      4.打开浏览器访问 http://localhost:3000,可看到 “Hello, Node.js!” 的输出。

案例:简单的时间显示服务器

假设我们要创建一个服务器,当用户访问时,显示当前的时间。以下是实现代码:

const http = require('http');const server = http.createServer((req, res) => {const now = new Date();res.writeHead(200, { 'Content-Type': 'text/plain' });res.end(`Current time is: ${now.toLocaleString()}`);
});const port = 3001;
server.listen(port, () => {console.log(`Time server running at port ${port}`);
});

六、使用 Express 框架

      1.安装 Express:

   npm install express

      2.创建 app.js 文件并引入 Express:

   const express = require('express');const app = express();

      3.定义路由:

   app.get('/', (req, res) => {res.send('Hello, Express!');});

      4.启动服务器:

   const port = 3000;app.listen(port, () => {console.log(`Server running at port ${port}`);});

访问 http://localhost:3000 可看到输出。

案例:图书管理系统的简单 API

假设我们要创建一个简单的图书管理系统的 API,使用 Express 框架。我们可以定义以下路由:

const express = require('express');
const app = express();// 模拟图书数据
let books = [{ id: 1, title: 'Book 1', author: 'Author 1' },{ id: 2, title: 'Book 2', author: 'Author 2' }
];// 获取所有图书
app.get('/books', (req, res) => {res.json(books);
});// 获取特定图书
app.get('/books/:id', (req, res) => {const book = books.find(b => b.id === parseInt(req.params.id));if (!book) return res.sendStatus(404);res.json(book);
});const port = 3002;
app.listen(port, () => {console.log(`Book API running at port ${port}`);
});

七、处理表单数据

      1.安装 body-parser 中间件:

   npm install body-parser

      2.引入并配置 Express 使用 body-parser

   const express = require('express');const bodyParser = require('body-parser');const app = express();app.use(bodyParser.urlencoded({ extended: false }));

      3.定义路由处理表单提交:

   app.post('/submit', (req, res) => {const name = req.body.name;res.send(`Hello, ${name}!`);});

      4.创建 HTML 表单提交数据到 /submit 路由。

八、Node.js 中的文件操作

  1. 读取文件

    • 异步读取:使用 fs.readFile()
    • 同步读取:使用 fs.readFileSync()
  2. 写入文件

    • 异步写入:使用 fs.writeFile()
    • 同步写入:使用 fs.writeFileSync()
  3. 文件追加内容

    • 异步追加:使用 fs.appendFile()
    • 同步追加:使用 fs.appendFileSync()
  4. 检查文件是否存在

    • 同步方法:使用 fs.existsSync()
    • 异步方法:使用 fs.access()
  5. 删除文件

    • 异步删除:使用 fs.unlink()
    • 同步删除:使用 fs.unlinkSync()
  6. 获取文件信息

    • 异步方法:使用 fs.stat()
    • 同步方法:使用 fs.statSync()

案例:日志记录器

假设我们要创建一个简单的日志记录器,将应用中的重要事件记录到文件中。以下是实现代码:

const fs = require('fs');function logEvent(message) {const now = new Date();const logMessage = `${now.toLocaleString()} - ${message}\n`;fs.appendFile('log.txt', logMessage, (err) => {if (err) console.error(err);});
}logEvent('Application started');
logEvent('User logged in');

九、Node.js 操作数据库(以 MySQL 为例)

      1.安装 mysql2 模块:

   npm install mysql2

      2.操作数据库示例代码:

   const mysql = require('mysql2');// 创建数据库连接const connection = mysql.createConnection({host: 'localhost',user: 'your_username',password: 'your_password',database: 'your_database_name'});// 连接数据库connection.connect((err) => {if (err) {console.error('Error connecting to database:', err);return;}console.log('Connected to database.');});// 插入数据const insertData = { name: 'John', age: 30 };const insertQuery = 'INSERT INTO users (name, age) VALUES (?,?)';connection.query(insertQuery, [insertData.name, insertData.age], (err, results) => {if (err) {console.error('Error inserting data:', err);return;}console.log('Inserted data with id:', results.insertId);});// 查询数据const selectQuery = 'SELECT * FROM users';connection.query(selectQuery, (err, results) => {if (err) {console.error('Error querying data:', err);return;}console.log('Query results:', results);});// 更新数据const updateData = { name: 'Updated John', age: 31, id: 1 };const updateQuery = 'UPDATE users SET name =?, age =? WHERE id =?';connection.query(updateQuery, [updateData.name, updateData.age, updateData.id], (err, results) => {if (err) {console.error('Error updating data:', err);return;}console.log('Updated rows:', results.affectedRows);});// 删除数据const deleteId = 1;const deleteQuery = 'DELETE FROM users WHERE id =?';connection.query(deleteQuery, [deleteId], (err, results) => {if (err) {console.error('Error deleting data:', err);return;}console.log('Deleted rows:', results.affectedRows);});// 关闭数据库连接connection.end((err) => {if (err) {console.error('Error closing database connection:', err);return;}console.log('Database connection closed.');});

案例:用户管理系统数据库操作

假设我们要创建一个用户管理系统,使用 Node.js 和 MySQL 数据库。以下是实现的部分代码:

const mysql = require('mysql2');const connection = mysql.createConnection({host: 'localhost',user: 'your_username',password: 'your_password',database: 'user_management'
});// 添加用户
function addUser(user) {const insertQuery = 'INSERT INTO users (name, email) VALUES (?,?)';return new Promise((resolve, reject) => {connection.query(insertQuery, [user.name, user.email], (err, results) => {if (err) reject(err);else resolve(results.insertId);});});
}// 获取用户
function getUserById(id) {const selectQuery = 'SELECT * FROM users WHERE id =?';return new Promise((resolve, reject) => {connection.query(selectQuery, [id], (err, results) => {if (err) reject(err);else resolve(results[0]);});});
}// 更新用户
function updateUser(id, user) {const updateQuery = 'UPDATE users SET name =?, email =? WHERE id =?';return new Promise((resolve, reject) => {connection.query(updateQuery, [user.name, user.email, id], (err, results) => {if (err) reject(err);else resolve(results.affectedRows);});});
}// 删除用户
function deleteUser(id) {const deleteQuery = 'DELETE FROM users WHERE id =?';return new Promise((resolve, reject) => {connection.query(deleteQuery, [id], (err, results) => {if (err) reject(err);else resolve(results.affectedRows);});});
}

十、使用 Express 框架操作数据库

      1.安装必要模块:

      安装 Express、mysql2 和 express-myconnection

npm install express mysql2 express-myconnection

      2. 配置数据库连接:

const express = require('express');const app = express();const mysql = require('mysql2');const myConnection = require('express-myconnection');const dbOptions = {host: 'localhost',user: 'your_username',password: 'your_password',database: 'your_database_name'};app.use(myConnection(mysql, dbOptions, 'single'));

      3.定义路由操作数据库:

   app.get('/users', (req, res) => {req.getConnection((err, connection) => {if (err) {return res.sendStatus(500);}connection.query('SELECT * FROM users', (err, results) => {connection.release();if (err) {return res.sendStatus(500);}res.json(results);});});});app.post('/users', (req, res) => {const newUser = req.body;req.getConnection((err, connection) => {if (err) {return res.sendStatus(500);}connection.query('INSERT INTO users SET?', newUser, (err, results) => {connection.release();if (err) {return res.sendStatus(500);}res.sendStatus(201);});});});

十一、总结

本文全面介绍了 Node.js 的入门知识,包括安装、基本概念、文件操作、数据库操作以及使用 Express 框架。Node.js 为 JavaScript 开发者提供了强大的服务器端编程能力,通过学习和实践,您可以构建高效、可扩展的网络应用和命令行工具。在学习过程中,多实践、多尝试不同功能,参考官方文档和在线资源,以加深对 Node.js 的理解。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

训练VLM(视觉语言模型)的经验

知乎:lym 链接:https://zhuanlan.zhihu.com/p/890327005 如果可以用prompt解决,尽量用prompt解决,因为训练(精调)的模型往往通用能力会下降,训练和长期部署成本都比较高,这个成本也包…

vScode---配置Pyqt5环境--记录

前提条件: python运行环境已正常安装 1、安装Pyqt5 第三方库下载地址记录: 清华大学:https://pypi.tuna.tsinghua.edu.cn/simple 豆瓣:https://pypi.douban.com/simple 阿里云:https://mirrors.aliyun.com/pypi/simpl…

一文读懂组态图和组态软件,最浅显的解读

一、什么是组态图 组态图是指在工业自动化领域中,用来描述和展示控制系统中各个组件之间关系和工作流程的图形化表示方法。它是一个系统的框架图,通过图形符号和连接线,将各个组件(如传感器、执行器、控制器等)以及它…

linux ps和kill指令

目录 ps 命令 kill指令: 示例: 补充:管道的概念 管道的概念 管道的用途 示例 在Linux系统中,ps 和 kill 是两个非常常用的命令,用于管理和终止进程。 ps 命令 ps 命令用于显示当前系统中的进程状态。它可以提供…

责任链模式下,解决开闭原则问题实践

前言 在现代软件工程中,设计模式是解决常见问题的有效工具之一。它们吸收了前人的经验,不仅帮助开发者编写更清晰、更可维护的代码,还能促进团队之间的沟通和协作。责任链模式(Chain of Responsibility Pattern)作为一…

无人机+视频推流直播EasyCVR视频汇聚/EasyDSS平台在森林防护巡检中的解决方案

随着科技的飞速发展,无人机技术在各个领域的应用日益广泛,特别是在森林防护与巡检方面,无人机以其独特的优势,为传统林业管理带来了革命性的变化。本文将探讨无人机在森林防护巡检中的解决方案,分析其工作原理、优势及…

基于SSM+微信小程序的电子点餐管理系统(点餐1)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于SSM微信小程序的电子点餐管理系统实现了管理员及用户。管理员实现了首页、个人中心、餐品分类管理、特色餐品管理、订单信息管理、用户管理、特价餐品管理、活动订单管理、系统管理。…

【论文学习与撰写】使用endnote工具进行论文参考文献的引用与插入

目录 1、软件的安装 2、放入endnote格式文献 3、endnote里文献管理 4、论文里引用参考文献的插入 5、参考文献的格式转换,及格式的下载 1、软件的安装 关注软件管家,进行下载软件和安装软件 下载通道②百度网盘丨下载链接: https://pa…

js.矩阵置零

链接:73. 矩阵置零 - 力扣(LeetCode) 题目: 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1: 输入:matrix [[1,1,1],…

Flutter 11 Android原生项目集成Flutter Module

本文主要讲解如何在已有的Android原生老项目中集成Flutter模块。 实现流程: 1、在Android原生项目根目录下,创建Flutter Module; 2、修改Android原生项目settings.gradle,绑定 Flutter Module; 3、修改Android原生…

15分钟学Go 第6天:变量与常量

第6天:变量与常量 在Go语言中,变量和常量是编程的基础概念。理解如何定义和使用它们不仅能帮助我们管理数据,还能增强代码的可读性和可维护性。在本章中,我们将详细探讨Go语言中的变量和常量,涵盖它们的定义、使用、作…

[Xshell] Xshell的下载安装使用及连接linux过程 详解(附下载链接)

前言 Xshell.zip 链接:https://pan.quark.cn/s/5d9d1836fafc 提取码:SPn7 安装 下载后解压得到文件 安装路径不要有中文 打开文件 注意!360等软件会拦截创建注册表的行为,需要全部允许、同意。或者退出360以后再安装。 在“绿化…

spdlog学习记录

spdlog Loggers:是 Spdlog 最基本的组件,负责记录日志消息。在 Spdlog 中,一个 Logger 对象代表着一个日志记录器,应用程序可以使用 Logger 对象记录不同级别的日志消息Sinks:决定了日志消息的输出位置。在 Spdlog 中&…

程序员节的故事:在代码的海洋中遨游

#1024程序员节 | 征文# 一年一度的程序员节又来了,作为一名热爱编程的开发者,我总是期待着这个特殊的日子。10月24日,不仅是程序员们的节日,更是我们分享故事、交流技术的时刻。今年的1024征文活动让我感到无比兴奋,因…

Axure重要元件三——中继器修改数据

亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢! 课程主题:中继器修改数据 主要内容:显示编辑内容、表格赋值、修改数据 应用场景:更新行、表单数据行修改 案例展示: 正文…

STM32L031F6P6基于CubeMX的串口通信调试笔记

用CubeMX创建项目 本实例用的PA14、PA13两个引脚,LPUART1。 对串口参数进行设置: 开启串口中断: 时钟源设置成内部高频时钟: 对项目进行设置: 生成代码: 在串口初始化函数中加入 __HAL_UART_ENA…

C++11 thread,mutex,condition_variable,atomic,原子操作CAS,智能指针线程安全,单例模式最简单实现方式

1.thread 在c11中,c标准委员会开发出了thread库;接下来我们先来看看这个库的使用吧; 1.1 thread类接口介绍 1.1.1 thread类构造函数 我们thread库中的thread类的构造函数可以通过直接传递回调函数与函数的参数来构造线程: int…

THP4 SOP16 芯片 高速光耦芯片

光电耦合器输入端加电信号使发光源发光,光的强度取决于激励电流的大小,此光照射到封装在一起的受光器上后,因光电效应而产生了光电流,由受光器输出端引出,这样就实现了电一光一电的转换。 由于光耦合器输入输出间互相…

mysql主从复制及故障修复

一、主MySQL数据库的配置 分别在三台主机(chen2/10.110、chen3/10.120、chen4/10.130)中安装mysql数据,其中chen2/10.110作为主MySQL服务器,其余两台作为从MySQL服务器。 1、在主机上部署mysql数据库 详细的请看上一篇:mysql数据…

2021年江西省职业院校技能大赛(高职组) “云计算应用”赛项样题

2021年江西省职业院校技能大赛(高职组) “云计算应用”赛项样题 【任务 1】基础运维任务[5 分]【题目 1】基础环境配置【题目 2】镜像挂载【题目 3】Yum 源配置【题目 4】时间同步配置【题目 5】计算节点分区 【任务 2】OpenStack 搭建任务[15 分]【题目…