服务器端的JavaScript脚本 Node.js 使用入门
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境,它使得 JavaScript 不仅可以运行在浏览器中,还能在服务器端执行,自2009年发布以来,Node.js 因其非阻塞 I/O 和事件驱动的特性,在构建高性能、可扩展的网络应用程序方面表现出色,广泛应用于 Web 开发、后端服务以及实时应用等众多领域,本文将带你踏上 Node.js 的学习之旅,从基础入门到精通掌握,同时为你推荐丰富的学习资源和网站。
一、Node.js 基础入门
(一)Node.js 安装与环境搭建
1、安装 Node.js:访问 [Node.js 官方网站](https://nodejs.org/),根据你的操作系统选择相应的安装包进行下载,安装过程通常较为简单,按照提示逐步操作即可,安装完成后,打开命令提示符(Windows)或终端(Mac/Linux),输入node -v
命令,如果能正确显示 Node.js 的版本号,则说明安装成功。
2、了解 npm(Node Package Manager):npm 是 Node.js 的包管理工具,随 Node.js 一起安装,它允许开发者轻松地安装、管理和共享第三方模块,在命令提示符或终端中输入npm -v
可以查看 npm 的版本号。
(二)JavaScript 基础学习
1、变量与数据类型:JavaScript 中有多种数据类型,包括字符串(用单引号或双引号括起来)、数字(整数和浮点数)、布尔值(true 或 false)、数组(用方括号表示)、对象(用花括号表示)等。
let name = "John"; // 字符串 let age = 30; // 数字 let isStudent = true; // 布尔值 let fruits = ["apple", "banana", "orange"]; // 数组 let person = { name: "John", age: 30 }; // 对象
2、函数:函数是 JavaScript 中可复用的代码块,可以使用 function 关键字定义函数,也可以使用箭头函数的语法。
function add(a, b) { return a + b; } // 箭头函数写法 const subtract = (a, b) => a b;
3、控制流:包括条件语句(如 if-else、switch)和循环语句(如 for、while)。
if (age > 18) { console.log("You are an adult."); } else { console.log("You are a minor."); } for (let i = 0; i < 5; i++) { console.log(i); }
(三)Node.js 核心概念
1、模块系统:Node.js 使用模块来组织代码,一个模块可以是一个 JavaScript 文件,其中包含可复用的函数、变量或类,通过module.exports
或exports
来导出模块的内容,使用require
函数来导入其他模块。
// math.js function add(a, b) { return a + b; } function subtract(a, b) { return a b; } module.exports = { add, subtract }; // main.js const math = require('./math'); console.log(math.add(5, 3)); // 输出 8 console.log(math.subtract(8, 4)); // 输出 4
2、事件驱动编程:Node.js 基于事件驱动的架构,许多操作都是异步的,当这些操作完成或发生特定事件时,会触发相应的回调函数,读取文件是一个异步操作:
const fs = require('fs'); fs.readFile('file.txt', 'utf8', (err, data) => { if (err) { console.error(err); } else { console.log(data); } });
在这个例子中,当文件读取完成时,会调用回调函数,并将读取到的数据或错误信息作为参数传递给回调函数。
3、非阻塞 I/O:Node.js 的非阻塞 I/O 使得它能够在处理 I/O 操作时不会阻塞主线程,从而可以同时处理多个请求,提高应用程序的性能和响应能力,在一个 Web 服务器中,当一个请求到来时,Node.js 可以快速响应并开始处理,而不需要等待其他 I/O 操作(如读取数据库或文件)完成。
二、Node.js 进阶学习
(一)HTTP 服务器与路由
1、创建 HTTP 服务器:使用 Node.js 的 http 模块可以创建一个简单的 HTTP 服务器,服务器可以监听特定的端口,接收客户端的请求,并返回相应的响应。
const http = require('http'); const server = http.createServer((req, res) => { res.writeHead(200, { 'Content-Type': 'text/plain' }); res.end('Hello, World!'); }); server.listen(3000, () => { console.log('Server running on port 3000'); });
这个服务器会在端口 3000 上运行,当客户端访问时,会返回 “Hello, World!” 的文本响应。
2、路由实现:为了处理不同的 URL 请求,可以实现路由功能,通过检查请求的 URL 路径,服务器可以根据不同的路由执行不同的操作。
const http = require('http'); const server = http.createServer((req, res) => { if (req.url === '/') { res.writeHead(200, { 'Content-Type': 'text/plain' }); res.end('Hello, home page!'); } else if (req.url === '/about') { res.writeHead(200, { 'Content-Type': 'text/plain' }); res.end('About us'); } else { res.writeHead(404, { 'Content-Type': 'text/plain' }); res.end('Not Found'); } }); server.listen(3000, () => { console.log('Server running on port 3000'); });
在这个例子中,根据请求的 URL 路径,服务器会返回不同的响应内容。
(二)RESTful API 开发
Node.js 非常适合用于开发 RESTful API,结合 Express.js 框架可以让开发更加便捷,Express.js 是一个简约且灵活的 Node.js Web 应用框架,提供了一系列强大的特性来帮助开发者构建 Web 应用和 API,以下是一个简单的 RESTful API 示例:
const express = require('express'); const app = express(); const port = 3000; app.use(express.json()); // 解析 JSON 请求体 // 获取所有用户 app.get('/users', (req, res) => { res.status(200).json([{ id: 1, name: 'John Doe' }, { id: 2, name: 'Jane Doe' }]); }); // 根据 ID 获取用户 app.get('/users/:id', (req, res) => { const userId = parseInt(req.params.id); const user = { id: userId, name:User${userId}
}; res.status(200).json(user); }); // 创建新用户 app.post('/users', (req, res) => { const newUser = req.body; res.status(201).json(newUser); }); // 更新用户信息 app.put('/users/:id', (req, res) => { const updates = req.body; res.status(200).json({ ...updates, message: 'Updated successfully' }); }); // 删除用户 app.delete('/users/:id', (req, res) => { res.status(204).send(); }); app.listen(port, () => { console.log(Server is running on http://localhost:${port}
); });
这个简单的 API 包括了 CRUD(创建、读取、更新、删除)操作,使用了 Express.js 的各种功能来简化路由和中间件的处理。
三、实战项目与学习资源推荐
1、内容发布系统:这种系统可以用于新闻、博客、官方网站、论坛、社区等多种用途,你可以通过这个项目学习前后端分离的开发模式,前端页面、后端服务和数据库的交互等知识,相关教程可以参考 [实验楼的内容发布系统课程](https://www.shiyanlou.com/courses/1505)。
2、Sequelize 操作 MySQL:Sequelize 是一个基于 promise-orm 的 Node.js ORM(对象关系映射)库,用于操作和管理 MySQL、PostgreSQL、SQLite 等关系型数据库,通过学习 Sequelize,你可以掌握如何在 Node.js 应用中使用数据库,相关教程可以参考 [实验楼的 Sequelize 操作 MySQL 课程](https://www.shiyanlou.com/courses/509)。
3、Node.js 实现上传文件功能:这个项目主要介绍如何搭配 Node.js 服务程序实现文件上传,通过这个项目,你可以学习文件上传的原理以及相关的安全措施,相关教程可以参考 [实验楼的 Node.js 实现上传文件功能课程](https://www.shiyanlou.com/courses/458)。
4、React+Express+MongoDB 仿网易云音乐:这个项目结合了 React、Express 和 MongoDB,实现了一个类似于网易云音乐的完整应用,通过这个项目,你可以学习前后端分离的开发模式,以及如何使用 React 进行前端开发,如何使用 Express 进行后端开发,如何使用 MongoDB 进行数据存储和管理,相关教程可以参考 [实验楼的 React+Express+MongoDB 仿网易云音乐课程](https://www.shiyanlou.com/courses/888)。
5、Node.js 实现静态文件服务器:通过这个项目,你可以学习如何使用 Node.js 实现一个简单的静态文件服务器,熟悉 Node.js 创建 Web 服务器的过程,相关教程可以参考 [实验楼的 Node.js 实现静态文件服务器课程](https://www.shiyanlou.com/courses/520)。
6、Node.js 实现私人笔记本:这个项目教你如何使用 Node.js 技术完成一个私人笔记本项目,每个注册用户都可以在自己的私人空间里写下自己的感受,通过这个项目,你可以快速学习 Node.js 网站开发的基础知识,相关教程可以参考 [实验楼的 Node.js 实现私人笔记本课程](https://www.shiyanlou.com/courses/446)。
7、Node.js 经典项目实战:通过完成一些经典项目,你可以高强度学习 Node.js 开发,这些项目涵盖了 Node.js 的基础、快速框架、Socket.io、Angular.js、Redis、MongoDB 等内容,相关教程可以参考 [实验楼的 Node.js 经典项目实战课程](https://www.shiyanlou.com/courses/455)。
四、相关问题与解答栏目
1、问题1:什么是中间件?它在 Express.js 中起什么作用?解答:中间件(Middleware)是指处理 HTTP 请求和响应的函数,在 Express.js 中,中间件可以执行以下功能:执行任何代码、修改请求和响应对象、结束请求-响应循环、调用堆栈中的下一个中间件,中间件通常用于日志记录、身份验证、解析请求体、压缩等任务,你可以在 Express.js 应用中使用app.use()
方法来加载中间件。app.use(express.json())
用于解析 JSON 请求体。
2、问题2:如何在 Node.js 中实现数据库连接池?解答:在 Node.js 中,可以使用各种数据库客户端库来实现数据库连接池,对于 MySQL,可以使用mysql2
库,它支持连接池功能,需要安装mysql2
:npm install mysql2
,在代码中创建连接池实例:const mysql = require('mysql2'); const pool = mysql.createPool({ host: 'localhost', user: 'root', password: 'password', database: 'test', waitForConnections: true, connectionLimit: 10, // 连接池大小, back_log: true, logQueries: true, queueLimit: 1000, // 如果超过此限制,将抛出错误 logErrors: true, logWarnings: true, enableKeepAlive: true, keepAliveInitialDelay: 30000, // 初始延迟时间 keepAliveInterval: 60000, // 间隔时间 connectionTimeout: 30000, // 超时时间 acquireTimeout: 60000, // 如果超过此时间还未获取到连接,则会抛出异常 acquireConnectionTimeout: 60000, reconnectLimit: 1000, // 如果重连次数超过此限制,则会抛出异常 retryInterval: 3000, // 重试间隔时间 retryCount: 10 // 重试次数,});
这样,就可以在需要时从连接池中获取连接,并在使用完毕后释放连接。async function queryDatabase() { let connection; try { connection = await pool.getConnection(); const [rows] = await connection.query('SELECT * FROM users'); console.log(rows); } catch (err) { console.error('Error executing query', err); } finally { if (connection) connection.release(); }}
这种方式可以提高数据库操作的效率和性能。
小伙伴们,上文介绍了“服务器端的JavaScript脚本 Node.js 使用入门”的内容,你了解清楚吗?希望对你有所帮助,任何问题可以给我留言,让我们下期再见吧。
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/763989.html