当收到的数据是数组时,无法从 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;
}
我正在尝试使用 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;
}