亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

節點:無法通過 API 解析 JSON

節點:無法通過 API 解析 JSON

汪汪一只貓 2022-06-16 10:23:51
我從文件中加載 JSON 作為字符串,嘗試將其解析回 JSON 并作為響應發送:router.get('/todos', (req,res) =>{    let todos = fs.readFile('todos.json', 'utf8',(err, data) =>{        if (err) throw err        res.send(JSON.parse(todos))     })})我的 todos.json 文件:{    "todos": [        {            "id": 1,            "text": "task number 1",            "priority": 3,            "done": false        },        {            "id": 2,            "text": "task number 2",            "priority": 3,            "done": false        },        {            "id": 3,            "text": "task number 3",            "priority": 3,            "done": false        },        {            "id": 4,            "text": "task number 4",            "priority": 3,            "done": false        },        {            "id": 5,            "text": "task number 5",            "priority": 3,            "done": false        }    ]}但是我收到此錯誤:未定義 ^SyntaxError:在 fs.readFile (/Users/mgonline/Desktop/programs/assessment/node-todo/routes/api/v1/todo.js:11:17) 的 JSON.parse () 位置 0 處的 JSON 中的意外標記 u在 FSReqWrap.readFileAfterClose [as oncomplete] (internal/fs/read_file_context.js:53:3)我不知道為什么,但是當我 console.log 從文件中獲取這個字符串時,我的程序似乎通過在集合數組中的最后一個對象之后添加一個逗號來稍微改變它:{    "id": 5,    "text": "task number 5",    "priority": 3,    "done": false},據說這會引起這個錯誤。我應該以不同的方式重寫我的 JSON 以避免沖突嗎?
查看完整描述

3 回答

?
喵喵時光機

TA貢獻1846條經驗 獲得超7個贊

問題

您使用fs.readFile不正確。 fs.readFile將返回undefined,因為readFile是異步的。文件的內容實際上是在data您提供的回調參數中到達的。


修理

完全刪除let todos =并調用fs.readFile(因為您不需要 的返回值fs.readFile)。


然后調用JSON.parse(data)而不是JSON.parse(todos)(因為那是文件內容到達的地方)。


router.get('/todos', (req,res) =>{

    let todos = fs.readFile('todos.json', 'utf8',(err, data) =>{

        if (err) throw err


        res.send(JSON.parse(todos)) 

    })

})

router.get('/todos', (req,res) =>{

    fs.readFile('todos.json', 'utf8',(err, data) =>{

        if (err) throw err


        res.send(JSON.parse(data)) 

    })

})


查看完整回答
反對 回復 2022-06-16
?
猛跑小豬

TA貢獻1858條經驗 獲得超8個贊

我猜,編輯器在保存時會自動添加逗號。嘗試將IDE的設置更改為在保存json文件時從數組元素中刪除逗號



查看完整回答
反對 回復 2022-06-16
?
慕容森

TA貢獻1853條經驗 獲得超18個贊

您尚未todos在應用程序中定義,它未定義,因此您收到錯誤消息,


正如@Sebastian Kaczmarek 所糾正的那樣,todos返回值是fs.readFile. 作為fs.readFile回報"undefined",你會得到錯誤。


使用datawhich 是腳本中包含required文件內容的參數的名稱。


router.get('/todos', (req, res) => {

  fs.readFile('todos.json', 'utf8', (err, data) => {

    if (err) throw err

    res.send(JSON.parse(data));

  })

})


查看完整回答
反對 回復 2022-06-16
  • 3 回答
  • 0 關注
  • 146 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號