我想使用slug e中的ID查询我的Supabase表。例如localhost:3000/book/1
,然后在Next中的页面上显示有关该图书的信息。js。
table
book/[id]。js
import { useRouter } from 'next/router'
import { getBook } from '@/utils/supabase-client';
export default function Book({bookJson}) {
const router = useRouter()
const { id } = router.query
return <div>
<p>Book: {id}</p>
<h1>{bookJson}</h1>
</div>
}
export async function getServerSideProps(query) {
const id = 1 // Get ID from slug
const book = await getBook(id);
const bookJson = JSON.stringify(book)
return {
props: {
bookJson
}
};
}
utils/supabase-client。js
export const getBook = async (id) => {
const bookString = id
let bookId = parseInt(bookString);
const { data, error } = await supabase
.from('books')
.select('id, name')
.eq('id', bookId)
if (error) {
console.log(error.message);
throw error;
}
return data || [];
};
1条答案
按热度按时间qv7cva1a1#
您可以使用
params
字段通过getServerSideProps
的上下文访问路由参数。params
:如果此页面使用dynamic route,则params
包含路由参数。如果页面名是[id].js
,那么params
看起来就像{ id: ... }
。或者,您也可以使用
query
字段访问路由参数。不同之处在于query
还将包含在URL中传递的任何查询参数。