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

Express.js记事本项目保存新笔记时出现JSON解析错误求助

问题解决:Express记事本保存笔记时JSON解析错误

错误原因

你的POST /api/notes路由存在两个核心问题:

  • fs.readFile是异步方法,返回的是Promise对象而非文件内容字符串。直接对Promise执行JSON.parse,会把"[object Promise]"当作JSON解析,这就是Unexpected token o错误的根源。
  • 未等待fs.writeFile完成就返回响应,可能出现文件未写完就给客户端返回结果的情况,无法保证数据一致性。

修正后的代码

const express = require('express');
const jsonRoutes = express.Router();
const fs = require('fs').promises;
const uuid = require('uuid');

jsonRoutes.get('/api/notes', async (req, res) => {
    try {
        const data = await fs.readFile('db/db.json', 'utf8');
        const notes = JSON.parse(data);
        res.json(notes);
    } catch (err) {
        res.status(500).json({ error: '读取笔记失败' });
    }
});

jsonRoutes.post('/api/notes', async (req, res) => {
    try {
        // 等待文件读取完成,拿到实际字符串内容
        const dataStr = await fs.readFile('db/db.json', 'utf8');
        const data = JSON.parse(dataStr);
        
        const newNote = {
            title: req.body.title,
            text: req.body.text,
            id: uuid.v4(), 
        };
        
        data.push(newNote);
        // 等待文件写入完成再返回响应
        await fs.writeFile('db/db.json', JSON.stringify(data, null, 2));
        res.json(newNote);
    } catch (err) {
        res.status(500).json({ error: '保存笔记失败' });
    }
});

module.exports = jsonRoutes;

额外优化说明

  • 加入try/catch捕获异步操作错误,避免服务器崩溃,同时给客户端返回明确的错误提示。
  • JSON.stringify添加null, 2参数,让生成的JSON文件格式化后更易读。
  • 移除对象属性的多余引号,保持代码简洁规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 15:13:28