当收到的数据是数组时,无法从 json-服务器读取 url 参数

Cannot read url parameters from json-server when data received is an array

我正在尝试使用 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

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

这有什么原因吗?

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

例如,尝试:

function slack_users_info() {
  const data = {
    users: []
  }

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