面试题答案
一键面试配置路由
在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去获取文章内容并展示。
处理潜在的路由参数验证问题
- 客户端验证:
- 可以在组件中对
articleId
进行简单的验证。例如,如果articleId
应该是数字,可以这样验证:
- 可以在组件中对
import { component$, useRouteParams } from '@builder.io/qwik';
export default component$(() => {
const { articleId } = useRouteParams();
if (isNaN(parseInt(articleId))) {
return <div>无效的文章ID</div>;
}
// 后续获取文章内容等操作
});
- 服务器端验证:
- 在API层(例如上述代码中的
/api/articles/${articleId}
接口),再次对articleId
进行验证。这可以防止恶意请求绕过客户端验证。在服务器端,可以使用一些验证库(如joi
等)进行更严格的验证。例如,在Node.js中使用Express和Joi:
- 在API层(例如上述代码中的
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' });
}
// 继续处理获取文章内容的逻辑
});
通过客户端和服务器端的双重验证,可以有效处理路由参数验证问题,确保系统的安全性和稳定性。