Node.js快速总结

理解 Node.js

● 是一个基于 Chrome V8 引擎的 JavaScript 运行时。

● 非阻塞、事件驱动、异步 I/O,适合高并发场景。

✅ 核心概念

● 事件循环 (Event Loop): Node.js 的异步机制。

● 模块系统: 使用 require() 引入模块,module.exports 导出模块。

● 文件系统 (fs): 处理文件读写。

● HTTP 模块: 构建 Web 服务器。

创建 HTTP 服务器

javascript 复制代码
const http = require('http');

const server = http.createServer((req, res) => {
    res.writeHead(200, { 'Content-Type': 'text/plain' });
    res.end('Hello, World!\n');
});

server.listen(3000, () => {
    console.log('Server running at http://localhost:3000/');
});
 Express  

✅ 简洁易用: 代码结构简明,易于上手。

✅ 路由系统: 提供灵活的 URL 路由处理。

✅ 中间件机制: 通过中间件实现请求和响应的处理流程。

✅ 模板引擎: 支持 EJS、Pug、Handlebars 等模板引擎。

✅ 静态文件: 可以轻松托管 CSS、JS、图片等静态资源。

✅ 跨平台: 与各种数据库(MongoDB、MySQL 等)无缝集成。

  1. Express.js 环境配置
javascript 复制代码
//初始化项目
npm init -y
//安装 Express.js
npm install express

2.Hello World 示例

创建 app.js 文件,编写以下代码:

java 复制代码
const express = require('express');
const app = express();

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

// 启动服务器,监听 3000 端口
app.listen(3000, () => {
    console.log('Server running at http://localhost:3000');
});
 运行项目:  
node app.js
  1. 中间件 (Middleware)
    中间件 是处理请求和响应的函数链,可以进行日志记录、身份验证、错误处理等。
javascript 复制代码
// 日志中间件
app.use((req, res, next) => {
    console.log(`${req.method} ${req.url}`);
    next(); // 继续执行下一个中间件或路由
});

// 处理 JSON 请求
app.use(express.json());

// 处理表单数据
app.use(express.urlencoded({ extended: true }));
  1. 路由系统 (Routing)
    使用 .get()、.post()、.put()、.delete() 处理不同请求方法:
javascript 复制代码
// GET 请求
app.get('/users', (req, res) => {
    res.send('获取所有用户');
});

// POST 请求
app.post('/users', (req, res) => {
    res.send('创建新用户');
});

// 动态路由参数
app.get('/users/:id', (req, res) => {
    const userId = req.params.id;
    res.send(`获取用户 ID: ${userId}`);
});

// 查询参数 (?name=Alice)
app.get('/search', (req, res) => {
    const name = req.query.name;
    res.send(`搜索用户: ${name}`);
});
  1. 静态文件托管
    使用 express.static() 提供静态资源服务,如 CSS、JS、图片等:
    app.use(express.static('public')); // public 文件夹内的文件可直接访问
  2. Express.js 与 MongoDB 集成
    安装 MongoDB 驱动 mongoose:
javascript 复制代码
npm install mongoose
 连接 MongoDB:  
const mongoose = require('mongoose');

mongoose.connect('mongodb://127.0.0.1:27017/mydb', {
    useNewUrlParser: true,
    useUnifiedTopology: true
}).then(() => console.log('MongoDB 连接成功'))
.catch(err => console.error(err));
 定义数据模型:  
const User = mongoose.model('User', {
    name: String,
    age: Number
});

// 保存数据
app.post('/add-user', async (req, res) => {
    const newUser = new User({
        name: req.body.name,
        age: req.body.age
    });
    await newUser.save();
    res.send('用户已保存');
});

// 查询数据
app.get('/users', async (req, res) => {
    const users = await User.find();
    res.json(users);
});
  1. 错误处理 (Error Handling)
javascript 复制代码
// 404 错误处理
app.use((req, res, next) => {
    res.status(404).send('页面未找到');
});

// 通用错误处理
app.use((err, req, res, next) => {
    console.error(err.stack);
    res.status(500).send('服务器内部错误');
});
  1. Express 项目结构建议
javascript 复制代码
my-express-app
├── node_modules
├── public
│   ├── css
│   ├── images
│   └── js
├── routes
│   ├── users.js
│   └── index.js
├── views
│   ├── index.ejs
│   └── users.ejs
├── app.js
└── package.json

将路由拆分到 routes 文件夹,便于项目维护:

javascript 复制代码
const express = require('express');
const router = express.Router();

router.get('/', (req, res) => {
    res.send('用户列表');
});

module.exports = router;
 app.js:  
const express = require('express');
const app = express();

const userRoutes = require('./routes/users');

// 使用路由
app.use('/users', userRoutes);

app.listen(3000, () => {
    console.log('Server running on http://localhost:3000');
});
  1. 启动与自动重启 (使用 nodemon)
javascript 复制代码
//安装 nodemon:
npm install -g nodemon

//使用 nodemon 启动项目:
nodemon app.js
相关推荐
zheshiyangyang21 分钟前
Vue+ElementPlus的一些问题修复汇总
前端·javascript·vue.js
怣疯knight28 分钟前
CryptoJS库中WordArray对象支持哪些输出格式?除了toString() 方法还有什么方法可以输出吗?WordArray对象的作用是什么?
前端·javascript
患得患失9491 小时前
【前端】【面试】【树】JavaScript 树形结构与列表结构的灵活转换:`listToTree` 与 `treeToList` 函数详解
开发语言·前端·javascript·tree·listtotree·treetolist
i建模1 小时前
Windows前端开发IDE选型全攻略
前端·ide·windows·node.js·编辑器·visual studio code
hamburgerDaddy11 小时前
从零开始用react + tailwindcs + express + mongodb实现一个聊天程序(三) 实现注册 登录接口
前端·javascript·mongodb·react.js·前端框架·express
Sunshinedada2 小时前
微信小程序面试题
前端·javascript·vue.js
码农研究僧2 小时前
【Vue 3 | Uniapp】 从一个页面 (index) 传输数值到另一个页面 (form) 的方法详解(附Demo)
javascript·vue.js·uni-app
KindSeven3 小时前
Proxy是什么,和defineProperty有什么区别
前端·javascript
天天向上10244 小时前
vue 修改el-tree高亮样式
前端·javascript·vue.js
壹壹得贰ぺ4 小时前
element 实现表格数据拖拽 数据拖拽其他区域实现 拖拽到日期 并在下面div盒子数据显示出来(直接复制)就能使用
javascript·vue.js·elementui