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

news/2024/10/25 11:53:40/

一、引言

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

二、Node.js 的安装

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

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

三、Node.js 的基本概念

1.模块系统

  • Node.js 使用 CommonJS 模块规范,可将代码分割成多个模块,便于组织和管理。
  • 通过 require() 函数引入其他模块,使用 module.exports 或 exports 对象导出模块功能。
  • 例如:
javascript">   // math.jsfunction add(a, b) {return a + b;}function subtract(a, b) {return a - b;}module.exports = {add,subtract};
javascript">   // 引入模块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 处理异步操作结果。
  • 回调函数读取文件示例:
javascript">   const fs = require('fs');fs.readFile('example.txt', 'utf8', (err, data) => {if (err) {console.error(err);} else {console.log(data);}});

Promise 读取文件示例:

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

async/await 读取文件示例:

javascript">   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.编写以下代码:

javascript">   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!” 的输出。

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

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

javascript">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:

javascript">   npm install express

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

javascript">   const express = require('express');const app = express();

      3.定义路由:

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

      4.启动服务器:

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

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

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

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

javascript">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 中间件:

javascript">   npm install body-parser

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

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

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

javascript">   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()

案例:日志记录器

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

javascript">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.操作数据库示例代码:

javascript">   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 数据库。以下是实现的部分代码:

javascript">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

javascript">npm install express mysql2 express-myconnection

      2. 配置数据库连接:

javascript">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.定义路由操作数据库:

javascript">   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.ppmy.cn/news/1541819.html

相关文章

基于Python+Flask的天气预报数据可视化分析系统(源码+文档)

简介: 本系统是一个集数据收集、处理、分析和可视化于一体的天气预报数据平台。通过Python和Flask框架的结合,我们能够高效地构建出一个用户友好的Web界面,让用户能够轻松访问并理解复杂的天气数据。系统不仅能够实时获取最新的天气信息&…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-18

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-18 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-18目录1. On the Reliability of Large Language Models to Misinformed and Demographically-Informed Prompts2. SafeLLM: Dom…

xlnt如何修改excel内容

xlnt是一个现代C库,专为在内存中处理电子表格并支持XLSX文件的读写而设计。以下是对xlnt的详细使用说明及方法: 一、xlnt简介 官网地址:https://github.com/tfussell/xlnt功能特点:xlnt提供API来生成、读取Excel文件&#xff0c…

[k8s理论知识]6.k8s调度器

k8s默认调度器 k8s调度器的主要职责,就是为一个新创建出来的pod寻找一个适合的节点Node。这包括两个步骤,第一,从所有集群的节点中,根据调度算法挑选出所有可以运行该pod的节点,第二,从第一步的结果中&…

10.24程序员节,你的代码安全吗?

随着10月24日程序员节的到来,我们向全世界的程序员们致敬,感谢他们用代码构建了我们依赖的数字化世界。在这个属于程序员的节日里,我们不仅要庆祝程序员的成就,更应该关注他们在网络安全领域的重要作用。网络开发人员作为数字世界…

PodCastLM:将PDF内容转化为音频播客的创新工具

在这个信息爆炸的时代,我们每天都在接触大量的文本内容,从学术论文到新闻报道,再到各种专业文章。但是,你有没有想过,这些静态的文字内容可以被转换成生动的音频播客,让你在通勤、健身或是休息时也能轻松吸…

linux-fslc 与 linux-imx

git://github.com/Freescale/linux-fslc.git 和 https://github.com/nxp-imx/linux-imx.git区别 git://github.com/Freescale/linux-fslc.git 和 https://github.com/nxp-imx/linux-imx.git 是两种不同的 Linux 内核源码仓库,分别由 Freescale 和 NXP 提供。它们的…

Java安全——AES(对称加密)和 RSA(非对称加密)的实现

目录 一、对称加密和非对称加密 1.对称加密 常见算法 2.非对称加密 常见算法 3.对称加密和非对称加密的对比 二、AES(对称加密) 1.生成AES密钥 2.加密数据 3.解密数据 完整代码 三、RSA(非对称加密) 1.生成RSA密钥对…