【问题标题】:Why my API doesn't read local JSON file? (NodeJS)为什么我的 API 不读取本地 JSON 文件? (NodeJS)
【发布时间】:2019-03-18 19:57:33
【问题描述】:

我正在尝试使用 GET 请求访问本地存储在我的 API 根文件夹中的 JSON 文件,但它一直在等待主机响应资源并且永远不会结束,除非我请求不存在的项目。

    import express from 'express'
    import movies from './movies.json'

    const app = express()
    const port = process.env.PORT || '3000'

    app.get('/', (req, res) => {
     res.send('Welcome to Vidly!')
    })

    app.get('/api/movies', (req, res) => {
     res.send(movies)
    })

    app.get('/api/movies/:id', (req, res) => {
     let movie
     for (let i = 0; i < movies.length; i++)
      if(movies[i].id === parseInt(req.params.id))
       movie = movies[i]

     if (!movie) {
      return res.status(404).send(`Movie ${req.params.id} not found.`)  
     }

     return movie
   })

   app.listen(port, () => {
    console.log(`Listening on http://localhost:${port}`)
   })

链接到 movies.json http://dontpad.com/movies.json

【问题讨论】:

  • movies.json 是一个数组,顺便说一句。
  • 你在说哪个 API? /api/movies 还是 /api/movies/:id?可以提供json文件吗?
  • 请提供你的json文件
  • 分享movies.json文件
  • 我会推荐你​​使用 fs(文件系统)来简化 json 文件的读写

标签: javascript node.js json http express


【解决方案1】:

我认为你有三个选择:

A.将movies.json重命名为movies.js,然后像这样导出代码

// movies.js
export default [
    ...
]

// index.js
import movies from './movies'

B.既然你明明用的是 babel,可以试试插件inline-json-import

C.使用文件系统清除 JSON 文件

const fs = require('fs');
const movies = JSON.parse(fs.readFileSync(`${__dirname}/movies`, 'utf8'));

【讨论】:

  • 我会尝试第一种方法,但我确实想使用 Json 文件。由于我需要为其添加值,因此我也将使用文件系统搜索第三个。
【解决方案2】:

您需要实现一个静态文件处理程序https://expressjs.com/en/resources/middleware/serve-static.html 以将您的 JSON 提供给客户端。

【讨论】:

    猜你喜欢
    • 2021-10-22
    • 1970-01-01
    • 1970-01-01
    • 2022-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多