MST

星途 面试题库

面试题:Node.js Express路由参数与查询字符串的验证及处理

假设在Node.js Express应用中,有一个路由 '/product/:productId',并且可能会携带查询字符串 '?sort=asc' 或 '?sort=desc'。要求编写中间件对productId进行合法性验证(确保是数字),同时根据sort的值对产品数据进行相应排序(假设已有获取产品数据的函数getProductData),并简要说明这样做的好处。
19.8万 热度难度
前端开发Node.js

知识考点

AI 面试

面试题答案

一键面试
const express = require('express');
const app = express();

// 获取产品数据的函数(假设已存在)
function getProductData(productId, sort) {
    // 这里实际实现获取数据并根据sort排序
    return [];
}

// 中间件
const productMiddleware = (req, res, next) => {
    const productId = parseInt(req.params.productId);
    if (isNaN(productId)) {
        return res.status(400).send('productId必须是数字');
    }
    const sort = req.query.sort === 'asc' ? 'asc' : req.query.sort === 'desc' ? 'desc' : 'asc';
    const data = getProductData(productId, sort);
    // 将数据挂载到req上,方便后续路由处理
    req.productData = data;
    next();
};

app.get('/product/:productId', productMiddleware, (req, res) => {
    res.send(req.productData);
});

const port = 3000;
app.listen(port, () => {
    console.log(`Server running on port ${port}`);
});

好处

  1. 数据合法性验证:确保productId是数字,防止非法输入导致程序出错或安全漏洞,增强了应用的健壮性。
  2. 数据预处理:在进入具体的路由处理逻辑前,提前获取并排序好数据,使得路由处理函数更加简洁,专注于返回响应,提高了代码的可读性和维护性。