在node post和graphql上模拟service worker.查询无效



我有一个节点应用程序,使用一个库,使graphql查询后,它的身份验证。下面的graphql查询不接收请求:

graphql.query(/^(.+?)$/, (req, res, ctx) => {
console.log('keys:', Object.keys(req))
console.log('query:', req.query)
console.log('variables', req.variables)
return res(
ctx.data({
data: [],
})
)
}),

尝试了许多组合,但/^(.+?)$/应该选择任何组合。当添加以下内容时:

rest.post('*', (req, res, ctx) => {
console.log('POST ALL', req.url.pathname)
if (req.url.pathname === '/oauth/token') {
return res(
ctx.status(200),
ctx.json({
valid:'token'
})
)
}
return req.json().then((body) => {
console.log('body:', body)
console.log('pass through')
return req.passthrough()
})
}),

记录如下内容:

POST ALL /oauth/token
POST ALL /project/graphql
body: {
operationName: 'ProductTypeId',
query: 'n' +
'    query fetchProductTypeId($where: String) {n' +
'      productTypes(where: $where, limit: 1) {n' +
'        results {n' +
'          idn' +
'        }n' +
'      }n' +
'    }n' +
'  ',
variables: { where: 'key="typeKey"' }
}
pass through

但是当尝试处理程序时:

graphql.query(/^(.+?)$/, (req, res, ctx) => {
console.log('keys:', Object.keys(req))
console.log('query:', req.query)
console.log('variables', req.variables)
return res(
ctx.data({
data: [],
})
)
}),
rest.post('*/oauth/token', (req, res, ctx) => {
log('POST', req.url.pathname)
if (req.url.pathname === '/oauth/token') {
return res(
ctx.status(200),
ctx.json({
valid:'token'
})
)
}
log('pass through')
return req.passthrough()
}),

使用令牌请求处理程序,但随后库发出graphql请求,graphql处理程序从未使用,相反,我得到:

[MSW] Warning: captured a request without a matching request handler:
• POST https://server/project/graphql
If you still wish to intercept this unhandled request, please create a request handler for it.
Read more: https://mswjs.io/docs/getting-started/mocks

很高兴msw告诉我,但处理程序显然在那里。尝试graphql.query('ProductTypeId'graphql.query('fetchProductTypeId',但结果相同。看起来要休息了。张贴和图表。查询处理程序破坏graphql,即使post只获取身份验证。

删除除graphql之外的所有处理程序,并提供有效凭据来创建令牌。所以唯一的处理程序是:

graphql.query('fetchProductTypeId', (req, res, ctx) => {
console.log('keys:', Object.keys(req))
console.log('query:', req.query)
console.log('variables', req.variables)
return res(
ctx.data({
data: [],
})
)
}),

然后在start server中我有:

server.listen({
onUnhandledRequest: (req) => {
console.log('unhandled')
console.log('path:::', req.url.pathname)
req
.json()
.then((body) => {
console.log('body:::', body)
})
.catch((e) => e)
},
})

这将记录:

unhandled
path::: /project/graphql
body::: {
query: 'query fetchProductTypeId($where: String) {n' +
'      productTypes(where: $where, limit: 1) {n' +
'        results {n' +
'          idn' +
'        }n' +
'      }n' +
'    }n' +
'  ',
operationName: 'fetchProductTypeId',
variables: { where: 'key="key"' }
}

也许graphql在我碰巧安装的msw版本(0.47.4版本)中完全坏了

graphql.query(/^(.+?)$/做同样的事情,处理程序可能根本不存在。

* *更新我看到graphql.operation((req, res, ctx)作为一个处理程序没有被调用,所以msw一定只是不明白,我的graphql请求不是graphql请求,即使身体被记录,显然是一个graphql请求。

刚刚创建了一个问题

我看到我使用的库创建了一个标题'Content-Type': 'application/graphql',似乎很好,根据这里的快速阅读,但是当我将其更改为'Content-Type': 'application/json'(库允许我添加标题)时,它将被处理程序拾取。

相关内容

  • 没有找到相关文章

最新更新