You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MERN栈Web应用实现文章创建时间显示的问题求助

解决MERN栈文章创建时间显示问题

一、修复MongoDB Schema中time字段不生效的问题

  • 确保Schema的time字段配置正确,设置默认值为当前时间,新创建的文章会自动填充该字段:
const articleSchema = new mongoose.Schema({
  // 其他业务字段...
  time: {
    type: Date,
    default: Date.now // 注意不要加括号,否则只会在Schema初始化时执行一次
  }
});
  • 若你是添加字段后才创建的文章,旧文章会缺失time字段。可以通过数据库脚本批量更新旧数据,或者在查询时给无time字段的文档设置默认值:
Article.find().lean().then(articles => 
  articles.map(art => ({...art, time: art.time || new Date()}))
)
  • 检查后端/get接口,确保查询时没有排除time字段,比如用Article.find().select('title content time')明确指定返回字段,或默认返回所有字段。

二、修复React端date-fns格式化错误

  • 先确认后端返回的time是有效Date类型。在React组件中打印console.log(article.time),如果是字符串格式(如ISO字符串),需先转为Date对象:
import { formatDistanceToNow } from 'date-fns';

// 假设从接口获取的文章数据存在article变量中
const publishDate = new Date(article.time);
// 校验日期有效性,避免无效日期导致的错误
if (isNaN(publishDate.getTime())) {
  return <span>发布时间未知</span>;
}
// 正确生成相对时间
const timeText = formatDistanceToNow(publishDate, { addSuffix: true });
  • 如果只想先展示基础时间,直接格式化Date对象即可:
// 显示本地格式时间,如"2024/5/20 14:30:00"
const basicTime = publishDate.toLocaleString();
// 或者显示ISO标准格式
const isoTime = publishDate.toISOString();

三、快速调试步骤

  1. 后端:在/get接口查询到文章后,打印console.log(article.time),确认字段存在且为正确的Date类型。
  2. 前端:在React组件的useEffect或数据获取回调中,打印完整的文章数据,检查time字段的实际值。

内容的提问来源于stack exchange,提问作者Chalk_and_feather

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 14:47:14