MST

星途 面试题库

面试题:Qwik文件系统路由中的动态路由处理

假设你正在开发一个博客系统,需要通过Qwik文件系统路由实现动态文章页面,文章ID从URL获取。请描述如何配置路由,以及在页面组件中如何获取和使用这个动态ID来展示对应文章内容,同时说明如何处理潜在的路由参数验证问题。
22.2万 热度难度
前端开发Qwik

知识考点

AI 面试

面试题答案

一键面试

配置路由

在Qwik项目中,使用文件系统路由来实现动态文章页面。假设项目结构如下:

src/
└── routes/
    └── blog/
        └── [articleId].qwik

这里[articleId]是动态路由参数,表示文章的ID。通过这种方式,Qwik会将形如/blog/123这样的URL映射到[articleId].qwik页面组件,其中123就是动态参数的值。

在页面组件中获取和使用动态ID

[articleId].qwik组件中,可以通过useRouteParams钩子来获取路由参数。示例代码如下:

import { component$, useRouteParams } from '@builder.io/qwik';

export default component$(() => {
    const { articleId } = useRouteParams();
    // 根据articleId获取文章内容,例如通过API调用
    const fetchArticle = async () => {
        const response = await fetch(`/api/articles/${articleId}`);
        const article = await response.json();
        return article;
    };
    const article = await fetchArticle();
    return (
        <div>
            <h1>{article.title}</h1>
            <p>{article.content}</p>
        </div>
    );
});

在上述代码中,useRouteParams返回一个包含所有路由参数的对象,通过解构获取articleId,然后使用这个ID去获取文章内容并展示。

处理潜在的路由参数验证问题

  1. 客户端验证
    • 可以在组件中对articleId进行简单的验证。例如,如果articleId应该是数字,可以这样验证:
import { component$, useRouteParams } from '@builder.io/qwik';

export default component$(() => {
    const { articleId } = useRouteParams();
    if (isNaN(parseInt(articleId))) {
        return <div>无效的文章ID</div>;
    }
    // 后续获取文章内容等操作
});
  1. 服务器端验证
    • 在API层(例如上述代码中的/api/articles/${articleId}接口),再次对articleId进行验证。这可以防止恶意请求绕过客户端验证。在服务器端,可以使用一些验证库(如joi等)进行更严格的验证。例如,在Node.js中使用Express和Joi:
const express = require('express');
const Joi = require('joi');
const app = express();

const articleSchema = Joi.object({
    articleId: Joi.number().required()
});

app.get('/api/articles/:articleId', (req, res) => {
    const { error } = articleSchema.validate({ articleId: parseInt(req.params.articleId) });
    if (error) {
        return res.status(400).json({ error: '无效的文章ID' });
    }
    // 继续处理获取文章内容的逻辑
});

通过客户端和服务器端的双重验证,可以有效处理路由参数验证问题,确保系统的安全性和稳定性。