对于基于Koa的API服务器,我想检查URL查询包含哪些参数。
我的设置看起来像这样简单:
const Koa = require('koa')
const app = new Koa()
const Router = require('koa-router')
router = new Router()
router.get('/', ctx => {
console.log(ctx.query)
})
app.use(router.routes())
app.use(router.allowedMethods())
app.listen(3000)
ctx.query
似乎具有类似于对象的结构,但不能作为一个对象使用。
诸如ctx.query.hasOwnProperty()
或ctx.query.toString()
之类的方法会导致错误,指出它不是函数。
尽管,Object.keys(ctx.query)
给出了一个键数组,这使我感到困惑,因为它显然是一个对象,并且应该具有上述方法。
ctx.query
到底是什么?如何使上述失败的方法起作用?
答案 0 :(得分:1)
ctx.query
是Node.js的querystring.parse()
方法的返回值。从文档中:
querystring.parse()方法返回的对象不 原型继承自JavaScript对象。这意味着 典型的Object方法,例如obj.toString(),obj.hasOwnProperty(), 其他未定义,将无法正常工作。
您可以检查Koa的request implementation。