一、搭建 Web 服务

1.1 初始化项目

        使用 npm init -y 初始化项目,生成 package.json 文件。

npm init -y

1.2 安装 Express 框架

        Express 是 Node.js 中最流行的 Web 框架,用于快速搭建 Web 服务。

npm install express --save

1.3 创建后端程序

        在 app.js 中编写代码,设置端口并响应数据。

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

// 响应根路径请求
app.get('/', (req, res) => {
    res.send('Hello World');
});

// 设置端口
const PORT = 4000;
app.listen(PORT, () => {
    console.log(`服务已启动:http://127.0.0.1:${PORT}`);
});

1.4 配置启动脚本

        在 package.json 中添加启动脚本,使用 nodemon 实现热更新。

"scripts": {
    "start": "nodemon ./app.js"
}

二、静态资源处理

2.1 导入路径模块

        使用 Node.js 的 path 模块处理文件路径。

const path = require('path');

2.2 设置静态资源目录

        通过 express.static 设置静态资源目录。

app.use(express.static(path.resolve(__dirname, 'public')));
  • 访问地址:http://127.0.0.1:4000/1.jpg

  • 如果资源路径为 public/images/1.jpg,则访问地址为 http://127.0.0.1:4000/images/1.jpg

2.3 自定义静态资源路径

        可以为静态资源设置虚拟路径。

app.use('/static', express.static(path.resolve(__dirname, 'public')));

三、跨域资源共享(CORS)

3.1 安装 CORS 模块

        使用 cors 模块解决跨域问题。

npm install cors

3.2 配置 CORS

        在 app.js 中启用 CORS。

const cors = require('cors');
app.use(cors());

3.3 手动设置跨域请求头

        可以为特定请求手动设置跨域请求头。

app.get('/list', (req, res) => {
    res.setHeader('Access-Control-Allow-Origin', '*');
    res.setHeader('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');
    res.setHeader('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS');
    res.send({ code: 200, data: [1, 2, 3] });
});

四、路由分发

4.1 创建路由文件

        在 router/exam.js 中定义路由。

const router = require('express').Router();

// GET 请求示例
router.get('/category', (req, res) => {
    res.send({ code: 200, data: [] });
});

// POST 请求示例
router.post('/category_add', (req, res) => {
    res.send({ code: 200, msg: '添加成功' });
});

module.exports = router;

4.2 在 app.js 中加载路由

        将路由挂载到指定路径。

app.use('/api/exam', require('./router/exam'));

4.3 解析 POST 请求

        使用 body-parser 解析 POST 请求的请求体。

npm install body-parser
const bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({ extended: false }));

五、数据库操作

5.1 安装 MySQL 模块

        使用 mysql 模块操作 MySQL 数据库。

npm install mysql

5.2 配置数据库连接

        在 common/db/database.js 中配置数据库连接信息。

module.exports = {
    mysql: {
        host: 'localhost',
        user: 'root',
        password: 'password',
        database: 'test',
        port: 3306
    }
};

5.3 创建数据库连接池

        在 common/db/db.js 中创建连接池。

const mysql = require('mysql');
const dbconfig = require('./database');

const pool = mysql.createPool(dbconfig.mysql);

module.exports = {
    query: function (sql) {
        return new Promise((resolve, reject) => {
            pool.getConnection((err, connection) => {
                connection.query(sql, (err, rows) => {
                    if (err) reject(err);
                    else resolve(rows);
                    connection.release();
                });
            });
        });
    }
};

5.4 使用模型操作数据库

        在 models/userModel.js 中定义用户模型。

const db = require('../common/db');
const aes = require('../common/aes');

class User {
    async register(nickName, account, password, email) {
        const rows = await db.query(`SELECT account FROM pre_user WHERE account='${account}'`);
        if (rows.length === 0) {
            const pwd = aes.aesEncrypt(password);
            await db.query(`INSERT INTO pre_user (nickName, account, password, email) VALUES ('${nickName}', '${account}', '${pwd}', '${email}')`);
            return { code: 200, msg: '注册成功' };
        } else {
            return { code: 1, msg: '账号已存在' };
        }
    }
}

module.exports = new User();

六、拓展知识点

6.1 中间件

        中间件是 Express 的核心概念,用于处理请求和响应。

app.use((req, res, next) => {
    console.log('请求时间:', new Date());
    next();
});

6.2 错误处理

        使用错误处理中间件捕获异常。

app.use((err, req, res, next) => {
    console.error(err.stack);
    res.status(500).send('服务器错误');
});

6.3 文件上传

        使用 multer 模块处理文件上传。

npm install multer
const multer = require('multer');
const upload = multer({ dest: 'uploads/' });

app.post('/upload', upload.single('file'), (req, res) => {
    res.send('文件上传成功');
});

6.4 WebSocket

        使用 ws 模块实现实时通信。

npm install ws
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });

wss.on('connection', (ws) => {
    ws.on('message', (message) => {
        console.log('收到消息:', message);
    });
    ws.send('连接成功');
});

七、总结

        Node.js 提供了强大的后端开发能力,结合 Express 框架可以快速搭建 Web 服务。通过静态资源处理、跨域配置、路由分发、数据库操作等知识点,开发者可以构建功能完善的后端应用。此外,中间件、错误处理、文件上传和 WebSocket 等拓展知识点进一步提升了 Node.js 的应用场景和开发效率。

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐