1. 首页 > IT综合教程 > 正文

it教程FG122-Node.js基础

内容大纲

1. Node.js简介

Node.js是一个基于Chrome V8引擎的JavaScript运行环境,允许开发者使用JavaScript编写服务器端代码。Node.js采用事件驱动、非阻塞I/O模型,使其轻量且高效,非常适合构建可扩展的网络应用。

Node.js的主要特点包括:

  • 使用JavaScript语言,前后端开发语言统一
  • 事件驱动,非阻塞I/O,高并发处理能力
  • 丰富的npm包生态系统
  • 跨平台,可在Windows、Linux、macOS等系统上运行
  • 轻量高效,适合构建微服务和API

更多学习教程www.fgedu.net.cn

2. Node.js安装

2.1 Linux系统安装Node.js

#

# 使用NodeSource安装最新版本

#

curl -fsSL https://deb.nodesource.com/setup_lts.x | bash –

#

apt install -y nodejs

#

# 检查Node.js和npm版本

#

node -v

$

v18.16.0

#

npm -v

$

9.5.1

2.2 Windows系统安装Node.js

1. 访问Node.js官方网站:https://nodejs.org/zh-cn/

2. 下载适合您系统的LTS版本安装包

3. 运行安装程序,按照向导完成安装

4. 安装完成后,打开命令提示符验证安装

C:\>

node -v

C:\>

v18.16.0

C:\>

npm -v

C:\>

9.5.1

2.3 macOS系统安装Node.js

$

# 使用Homebrew安装Node.js

$

brew install node

$

# 检查Node.js和npm版本

$

node -v

$

v18.16.0

$

npm -v

$

9.5.1

3. Node.js基本概念

3.1 全局对象

// console对象
console.log("Hello, Node.js!");

// process对象
console.log(process.version);
// 输出Node.js版本
console.log(process.platform);
// 输出操作系统平台
console.log(process.argv);
// 输出命令行参数

// __dirname和__filename
console.log(__dirname);
// 输出当前文件所在目录
console.log(__filename);
// 输出当前文件的完整路径

3.2 事件循环

Node.js采用事件驱动模型,通过事件循环处理异步操作。事件循环的主要阶段包括:

  1. 定时器阶段:处理setTimeout和setInterval回调
  2. I/O回调阶段:处理I/O操作的回调
  3. 闲置阶段:执行闲置回调
  4. 轮询阶段:执行I/O操作
  5. 检查阶段:处理setImmediate回调
  6. 关闭回调阶段:处理关闭事件的回调

3.3 异步编程

// 回调函数
const fs = require('fs');

fs.readFile('file.txt', 'utf8', (err, data) => {
    if (err) {
        console.error(err);
        return;
    }
    console.log(data);
});

// Promise
const readFilePromise = (filePath) => {
    return new Promise((resolve, reject) => {
        fs.readFile(filePath, 'utf8', (err, data) => {
            if (err) {
                reject(err);
                return;
            }
            resolve(data);
        });
    });
};

readFilePromise('file.txt')
    .then(data => console.log(data))
    .catch(err => console.error(err));

// async/await (ES2017+)
async function readFileAsync() {
    try {
        const data = await readFilePromise('file.txt');
        console.log(data);
    } catch (err) {
        console.error(err);
    }
}

readFileAsync();

4. Node.js模块系统

4.1 模块类型

  • 核心模块:Node.js内置的模块,如fs、path、http等
  • 文件模块:用户创建的模块,通过相对路径或绝对路径引入
  • 第三方模块:通过npm安装的模块

4.2 模块导出与引入

// 模块导出(module1.js)
// 方式1:导出单个值
module.exports = function add(a, b) {
    return a + b;
};

// 方式2:导出多个值
module.exports = {
    add: function(a, b) {
        return a + b;
    },
    multiply: function(a, b) {
        return a * b;
    }
};

// 方式3:使用exports
exports.add = function(a, b) {
    return a + b;
};
exports.multiply = function(a, b) {
    return a * b;
};

// 模块引入
const module1 = require('./module1');
console.log(module1.add(1, 2));
// 3
console.log(module1.multiply(2, 3));
// 6

4.3 核心模块示例

// path模块
const path = require('path');
console.log(path.join(__dirname, 'file.txt'));
// 输出完整路径
console.log(path.basename('/path/to/file.txt'));
// 输出文件名
console.log(path.extname('/path/to/file.txt'));
// 输出文件扩展名

// os模块
const os = require('os');
console.log(os.platform());
// 输出操作系统平台
console.log(os.totalmem());
// 输出总内存
console.log(os.freemem());
// 输出可用内存

// util模块
const util = require('util');
const readFile = util.promisify(fs.readFile);
readFile('file.txt', 'utf8')
    .then(data => console.log(data))
    .catch(err => console.error(err));

5. 文件系统操作

5.1 同步操作

const fs = require('fs');

// 读取文件
const data = fs.readFileSync('file.txt', 'utf8');
console.log(data);

// 写入文件
fs.writeFileSync('output.txt', 'Hello, Node.js!');

// 追加文件
fs.appendFileSync('output.txt', '\nAppend content');

// 删除文件
fs.unlinkSync('output.txt');

// 创建目录
fs.mkdirSync('newdir');

// 读取目录
const files = fs.readdirSync('newdir');
console.log(files);

// 删除目录
fs.rmdirSync('newdir');

5.2 异步操作

const fs = require('fs');

// 读取文件
fs.readFile('file.txt', 'utf8', (err, data) => {
    if (err) {
        console.error(err);
        return;
    }
    console.log(data);
});

// 写入文件
fs.writeFile('output.txt', 'Hello, Node.js!', (err) => {
    if (err) {
        console.error(err);
        return;
    }
    console.log('File written successfully');
});

// 追加文件
fs.appendFile('output.txt', '\nAppend content', (err) => {
    if (err) {
        console.error(err);
        return;
    }
    console.log('Content appended successfully');
});

// 删除文件
fs.unlink('output.txt', (err) => {
    if (err) {
        console.error(err);
        return;
    }
    console.log('File deleted successfully');
});

// 创建目录
fs.mkdir('newdir', (err) => {
    if (err) {
        console.error(err);
        return;
    }
    console.log('Directory created successfully');
});

// 读取目录
fs.readdir('newdir', (err, files) => {
    if (err) {
        console.error(err);
        return;
    }
    console.log(files);
});

// 删除目录
fs.rmdir('newdir', (err) => {
    if (err) {
        console.error(err);
        return;
    }
    console.log('Directory deleted successfully');
});

6. HTTP服务器创建

6.1 基本HTTP服务器

const http = require('http');

const server = http.createServer((req, res) => {
    // 设置响应头
    res.writeHead(200, {'Content-Type': 'text/plain'});
    // 发送响应内容
    res.end('Hello, World!\n');
});

// 监听端口
const port = 3000;
server.listen(port, () => {
    console.log(`Server running at http://fgedudb:${port}/`);
});

6.2 处理不同路由

const http = require('http');
const url = require('url');

const server = http.createServer((req, res) => {
    const parsedUrl = url.parse(req.url, true);
    const path = parsedUrl.pathname;
    
    res.writeHead(200, {'Content-Type': 'text/plain'});
    
    switch (path) {
        case '/':
            res.end('Home Page\n');
            break;
        case '/about':
            res.end('About Page\n');
            break;
        case '/contact':
            res.end('Contact Page\n');
            break;
        default:
            res.writeHead(404);
            res.end('404 Not Found\n');
    }
});

const port = 3000;
server.listen(port, () => {
    console.log(`Server running at http://fgedudb:${port}/`);
});

6.3 处理POST请求

const http = require('http');

const server = http.createServer((req, res) => {
    if (req.method === 'POST') {
        let body = '';
        
        // 接收请求体数据
        req.on('data', chunk => {
            body += chunk.toString();
        });
        
        // 请求体数据接收完成
        req.on('end', () => {
            console.log('Received data:', body);
            res.writeHead(200, {'Content-Type': 'text/plain'});
            res.end('POST request received\n');
        });
    } else {
        res.writeHead(200, {'Content-Type': 'text/plain'});
        res.end('GET request received\n');
    }
});

const port = 3000;
server.listen(port, () => {
    console.log(`Server running at http://fgedudb:${port}/`);
});

7. npm包管理

7.1 npm基本命令

$

# 初始化项目

$

npm init

$

# 安装包

$

npm install package-name

$

# 安装开发依赖

$

npm install –save-dev package-name

$

# 全局安装

$

npm install -g package-name

$

# 卸载包

$

npm uninstall package-name

$

# 查看已安装的包

$

npm list

$

# 查看包信息

$

npm view package-name

$

# 更新包

$

npm update package-name

7.2 package.json配置

{
  "name": "my-project",
  "version": "1.0.0",
  "description": "A Node.js project",
  "main": "index.js",
  "scripts": {
    "start": "node index.js",
    "test": "echo \"Error: no test specified\" && exit 1",
    "dev": "nodemon index.js"
  },
  "dependencies": {
    "express": "^4.18.2"
  },
  "devDependencies": {
    "nodemon": "^2.0.22"
  },
  "keywords": ["nodejs", "express"],
  "author": "Your Name",
  "license": "MIT"
}

7.3 使用第三方包示例

// 安装express
// npm install express

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

// 中间件
app.use(express.json());
app.use(express.urlencoded({ extended: true }));

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

app.get('/api/users', (req, res) => {
    res.json([
        { id: 1, name: 'John' },
        { id: 2, name: 'Jane' }
    ]);
});

app.post('/api/users', (req, res) => {
    const newUser = req.body;
    res.status(201).json(newUser);
});

// 启动服务器
app.listen(port, () => {
    console.log(`Server running at http://fgedudb:${port}/`);
});

8. Node.js最佳实践

生产环境建议

  • 使用PM2等进程管理工具管理Node.js应用
  • 设置NODE_ENV环境变量为production
  • 使用集群模式提高性能和可靠性
  • 合理使用缓存,减少I/O操作
  • 使用环境变量管理配置
  • 实施错误处理和日志记录
  • 使用ESLint和Prettier保持代码质量
  • 编写单元测试和集成测试
  • 使用TypeScript提高代码可维护性
  • 定期更新依赖包,修复安全漏洞

风哥风哥提示:Node.js生态系统非常丰富,建议根据项目需求选择合适的框架和库。

学习交流加群风哥微信: itpux-com

学习交流加群风哥QQ113257174

更多学习教程公众号风哥教程itpux_com

author:www.itpux.com

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息