Nuxt3中event.context.params.id显示undefined,如何获取动态路由ID?
解决Nuxt3中获取动态路由ID的问题
正确获取动态路由参数的方式
在Nuxt3的服务器端处理函数(defineEventHandler)中,动态路由参数直接挂载在event.params对象上,无需访问event.context.route或event.context.params。
修正后的代码示例
import sql from "mssql"; export default defineEventHandler(async (event) => { // 直接从event.params解构获取动态路由参数 const { id, db_name } = event.params; const db = { ...useRuntimeConfig().db, database: db_name, }; const table = "questions"; const catable = "Categories"; await sql.connect(db); let result; if (event.node.req.method === "GET") { // 改用参数化查询,避免SQL注入风险 result = await sql.query( `SELECT Category, Description, Icon, Title, ID FROM ${catable} JOIN ${table} ON ${catable}.CategoryId = ${table}.CategoryId WHERE ${catable}.CategoryId = @id`, { id: id } ); } return result?.recordset; });
关键注意事项
- 确保服务器路由文件命名符合动态路由规则:比如要获取
id参数,文件需命名为server/api/[id].ts(或嵌套路径如server/api/categories/[id].ts),参数名要与方括号内的名称完全一致。 - 必须使用参数化查询:原代码的字符串拼接SQL存在严重的SQL注入风险,修正后的代码采用参数化方式传递
id,这是后端数据库操作的基本安全规范。 - 调试时可直接打印
event.params查看所有路由参数:console.log(event.params)。
内容的提问来源于stack exchange,提问作者Shree
相关产品推荐
相关产品推荐

