从Express API返回的带引号的JSON对象-为什么?以及如何解决?

时间:2018-09-17 12:28:44

标签: javascript json node.js express

我知道这对我来说是一个愚蠢的错误,但是我挠头试图查看我要去哪里。我以前写过MERN堆栈应用程序,但是没有遇到过:返回我的JSON数据并用双引号引起来。

在服务器端,我正在读取具有以下格式的文件(带有fs.readFile

{"projects":[
  {
    "project1": {
      "title": "something",
      "date": "sometime",
      "text": "some stuff",
      "img": "some url"
    }
  }
]}

并因此提供服务

router.get('/projects', function (req, res) {
    logic.getProjects()
        .then(projects => res.json(projects))
        .catch(err => console.error(err))

我在客户端获取

 getProjects() {
        return fetch('/api/projects',{ headers:{'Content-Type': 'application/json'}})
            .then(res => res.json())
            .catch(err => console.log(err))
    }

但是我的React应用收到的是

"   {"projects":[
      {
        "project1": {
          "title": "something",
          "date": "sometime",
          "text": "some stuff",
          "img": "some url"
        }
      }
    ]} "

也就是说,即使它已经被解析了,但据我所知,它仍被双引号引起来。如果有人能指出我的错误(除了我自己,对所有人来说都是显而易见的),我将不胜感激!

1 个答案:

答案 0 :(得分:2)

readFile返回一个字符串。您将需要JSON.parse(readFile)并将其发送。

您的路线需要像

router.get('/projects', function (req, res) {
    logic.getProjects()
        .then(projects => JSON.parse(projects))
        .then(jsonProjects => res.json(jsonProjects))
        .catch(err => console.error(err))