这篇文章开始编写 使用 ssr 渲染文章详情页
这里需要使用 nextjs中的动态路由
在pages/article 新建 [id].tsx,表示 文章详情页的入口文件
同时新建 pages/article/index.module.scss
首先通过 url 获取 文章的 id字段
然后根据通过ssr获取文章详情数据
根据id 去数据表中查询当前文章的详情
这里增加一个功能,就是浏览次数,当前查询的时候,浏览次数增加 1 次
export async function getServerSideProps({ params }: any) {const articleId = params?.id;const db = await prepareConnection();const articleRepo = db.getRepository(Article);const article = await articleRepo.findOne({where: {id: articleId,},relations: ['user', 'comments', 'comments.user'],});if (article) {// 阅读次数 +1article.views = article?.views + 1;await articleRepo.save(article);}return {props: {article: JSON.parse(JSON.stringify(article)),},};}
通过以上 ssr 代码就拿到了 当前文章的数据
然后渲染这些基本信息
这里 markdown的内容 使用 markdown-to-jsx 第三方库 来加载
<div className="content-layout"><h2 className={styles.title}>{article?.title}</h2><div className={styles.user}><Avatar src={avatar} size={50} /><div className={styles.info}><div className={styles.name}>{nickname}</div><div className={styles.date}><div>{format(new Date(article?.update_time), 'yyyy-MM-dd hh:mm:ss')}</div><div>阅读 {article?.views}</div></div></div></div><MarkDown className={styles.markdown}>{article?.content}</MarkDown></div>
接着增加 是否显示编辑的逻辑
通过store拿到 当前登录的用户信息
const store = useStore();const loginUserInfo = store?.user?.userInfo;
当 用户登录的时候,显示编辑按钮
并且 点击 编辑 按钮 跳转到 文章 编辑页面
{Number(loginUserInfo?.userId) === Number(id) && (<Link href={`/editor/${article?.id}`}>编辑</Link>)}
