【问题标题】:Cannot read url parameters from json-server when data received is an array当接收到的数据是数组时,无法从 json-server 读取 url 参数
【发布时间】:2021-11-15 07:50:19
【问题描述】:

我正在尝试使用 json-server 构建一个假 api,但遇到了一个问题。我不知道我是否遗漏了什么,或者我只是遇到了一个错误。

基本上,如果我在请求作为单个对象接收的数据时发送一个 url 参数,那么当我尝试呈现该数据时,我可以很好地读取我的参数。

但如果我收到的数据是一个数组,那么我在尝试读取该参数时会得到未定义。

这些是我的文件(不要介意这背后的逻辑,我简化了一些事情以减少不必要的信息)。

server.js

const jsonServer = require('json-server')
const server = jsonServer.create()
const router = jsonServer.router(require('./db.js')())
const middlewares = jsonServer.defaults()
server.use(middlewares)
server.use(jsonServer.bodyParser)

router.render = (req, res) => {
    console.log("User try query: " + req.query.user)
    console.log("User try param: " + req.params['user'])

    if (req.url.startsWith('/slack_users_info')) {
      res.jsonp({
        user: res.locals.data
      })

    } else if (req.url.startsWith('/slack_users_info2')) {
      res.jsonp({
        user: res.locals.data
      })

    } else {
        res.jsonp(res.locals.data)
    }
}

server.use(router)

// Run server on indicated port.
server.listen(port = 3000, () => {
    console.log('JSON Server is running')
    console.log('http://localhost:' + port)
})

db.js

var faker = require('faker');

module.exports = function () {
    var data = {
        slack_users_info: slack_users_info(),
        slack_users_info2: slack_users_info2()
    }

    return data;
}

function slack_users_info() {
    subdata = []

    for (var i = 0; i < 10; i++) {
        subdata.push({
            id: "user_id_" + i,
        })
    }

    return subdata;
}

function slack_users_info2() {

    subdata = {
        id: "user_id"
    }

    return subdata;
}

我正在使用npm start

如果我请求数组,我会得到未定义: GET http://localhost:3000/slack_users_info?user=user_id_0 然后我得到:

User try query: undefined
User try param: undefined

如果我请求单个对象,我会得到预期的参数: GET http://localhost:3000/slack_users_info2?user=user_id_0 然后我得到:

User try query: user_id_0
User try param: undefined

在这两种情况下都正确接收到响应正文,我只是无法读取第一种情况下的参数。

这是有原因的吗?

【问题讨论】:

    标签: javascript json-server


    【解决方案1】:

    查看https://www.npmjs.com/package/json-server#generate-random-data,您似乎需要返回一个对象,但可以在该对象中包含您的数组。

    例如,试试:

    function slack_users_info() {
      const data = {
        users: []
      }
    
      for (var i = 0; i < 10; i++) {
        data.users.push({
          id: "user_id_" + i,
        })
      }
      return data;
    }
    

    【讨论】:

    • 是的,就是这样。谢谢!
    • 乐于助人,没问题
    猜你喜欢
    • 2013-10-04
    • 2013-05-25
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 2017-11-25
    • 2022-11-29
    • 2016-03-26
    相关资源
    最近更新 更多