- 解决方案思路:
- 在 Next.js 中,动态路由参数是以字符串形式传递的。要确保
userId
是数字类型,可以在获取参数后进行类型检查和转换。如果转换失败,需要处理错误,以防止应用程序出现异常。
- 代码实现:
- 在
pages/user/[userId].js
文件中:
import { useRouter } from 'next/router';
const UserPage = () => {
const router = useRouter();
const { userId } = router.query;
let validUserId;
if (typeof userId ==='string') {
const num = parseInt(userId, 10);
if (!isNaN(num)) {
validUserId = num;
} else {
// 处理非数字的情况,比如重定向到错误页面
router.push('/error');
return null;
}
} else {
// 处理异常情况,比如重定向到错误页面
router.push('/error');
return null;
}
return (
<div>
<p>User ID: {validUserId}</p>
</div>
);
};
export default UserPage;
- 上述代码中,首先从
router.query
获取userId
,它是字符串类型。然后使用parseInt
将其转换为数字,并通过isNaN
检查转换是否成功。如果userId
不是字符串类型或者转换失败,就重定向到错误页面,以确保应用程序的类型安全。