MST

星途 面试题库

面试题:Node.js Express高级路由参数处理

假设你正在使用Node.js的Express框架开发一个博客系统,有一个需求是根据文章的ID来获取特定文章。请描述如何定义带参数的路由来实现此功能,并且在获取文章ID后,如何连接数据库查询相应文章数据并返回给客户端。请提供关键代码片段及简要说明。
30.3万 热度难度
前端开发Node.js

知识考点

AI 面试

面试题答案

一键面试
  1. 定义带参数的路由: 在Express中,可以通过在路由路径中使用冒号(:id)来定义参数。以下是关键代码片段:

    const express = require('express');
    const app = express();
    
    // 定义带参数的路由,:id是文章ID参数
    app.get('/articles/:id', (req, res) => {
        const articleId = req.params.id;
        // 这里articleId就是从URL中获取的文章ID
        // 后续进行数据库查询等操作
    });
    

    说明:app.get('/articles/:id', callback) 定义了一个GET请求的路由,当客户端访问 /articles/具体ID 时,会执行该回调函数。req.params.id 可以获取到URL中 :id 位置的实际值。

  2. 连接数据库查询相应文章数据并返回给客户端: 这里假设使用 mysql2 库连接MySQL数据库,代码如下:

    const mysql = require('mysql2');
    const express = require('express');
    const app = express();
    
    // 创建数据库连接池
    const pool = mysql.createPool({
        host: 'localhost',
        user: 'root',
        password: 'password',
        database: 'blog_db',
        waitForConnections: true,
        connectionLimit: 10,
        queueLimit: 0
    });
    
    app.get('/articles/:id', (req, res) => {
        const articleId = req.params.id;
        pool.query('SELECT * FROM articles WHERE id =?', [articleId], (error, results, fields) => {
            if (error) throw error;
            if (results.length > 0) {
                res.json(results[0]);
            } else {
                res.status(404).send('Article not found');
            }
        });
    });
    
    const port = 3000;
    app.listen(port, () => {
        console.log(`Server running on port ${port}`);
    });
    

    说明:

    • 首先创建了一个MySQL数据库连接池 pool
    • 在路由回调中,使用 pool.query 方法执行SQL查询,SELECT * FROM articles WHERE id =? 中的 ? 是占位符,[articleId] 用于填充占位符。
    • 如果查询成功且有结果,将文章数据以JSON格式(res.json(results[0]))返回给客户端;如果没有找到相应文章,则返回404状态码和提示信息。