我有一个节点应用程序,使用一个库,使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'
(库允许我添加标题)时,它将被处理程序拾取。