欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 培训 > Node.js 入门全攻略:从安装到 Express 框架与数据库操作(含案例详解)

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

2024/11/29 18:26:00 来源:https://blog.csdn.net/weimengen/article/details/143103808  浏览:    关键词: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 的理解。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com