Node.js Swagger在Fastify NodeJS中尝试获取资源时发送以下错误:TypeError:NetworkError
我运行Swagger来测试我用NodeJS和fastfy框架编写的API。一切正常,当我在Postman中测试API时,一切正常。但在《大摇大摆》中,我犯了这样一个错误:Node.js Swagger在Fastify NodeJS中尝试获取资源时发送以下错误:TypeError:NetworkError,node.js,swagger,fastify,Node.js,Swagger,Fastify,我运行Swagger来测试我用NodeJS和fastfy框架编写的API。一切正常,当我在Postman中测试API时,一切正常。但在《大摇大摆》中,我犯了这样一个错误: TypeError: NetworkError when attempting to fetch resource. SyntaxError: Unexpected token u in JSON at position 0 at JSON.parse () 在我搜索了它之后,我发现我应该在代码中添加玉米。因此,我在ser
TypeError: NetworkError when attempting to fetch resource.
SyntaxError: Unexpected token u in JSON at position 0 at JSON.parse ()
在我搜索了它之后,我发现我应该在代码中添加玉米。因此,我在server.js中编写了以下代码:
fastify.addHook('onSend', (request, reply, payload, next) => {
reply.header('Access-Control-Allow-Origin', '*')
reply.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept, Access-Control-Allow-Origin, Cache-Control')
reply.header('Access-Control-Allow-Methods', 'GET')
Object.assign(reply.res, {
payload: JSON.parse(payload),
input: request.body || request.query,
})
next()
})
但是,斯威格与addHook不起作用!我不知道为什么!当我将其添加到我的代码中并转到以下url:localhost:3002/文档以查看我的Swagger API时,我遇到以下错误:
TypeError: NetworkError when attempting to fetch resource.
SyntaxError: Unexpected token u in JSON at position 0 at JSON.parse ()
但是当我从代码中注释addHook时,Swagger还可以,之后我得到了第一个错误!
如何在没有addHook的情况下将CORN添加到代码中?问题是
onSend
钩子在同一上下文中为每个请求运行
因此,当客户端请求http://localhost:3000/docs
重新调谐的负载
是text/html
的文本,而不是JSON。检查一下
因此,对文本或空响应运行JSON.parse(payload)
将导致出现错误
我应该有更多的信息来建议一个更好的方法,因为它应该有效(它会将您正在添加的相同标题添加到响应中)
所以我会更改钩子代码:
fastfy.addHook('onSend',(请求、回复、负载、下一个)=>{
reply.header('Access-Control-Allow-Origin','*'))
reply.header('Access-Control-Allow-Headers','Origin,X-request-With,Content-Type,Accept,Access-Control-Allow-Origin,Cache-Control'))
reply.header('Access-Control-Allow-Methods','GET')
让我们分析
if(有效载荷){
尝试{//尝试解析
parsed=JSON.parse(有效负载)
}捕获(错误){
//爸爸
}
}
Object.assign(reply.res{
有效载荷:已解析,
输入:request.body | | request.query
})
下一个()
})
让我们看看这个帮助您在fastify上配置CORS的软件包app@dimagolovin我还测试了它:fastfy.register(require('fastfy-cors'),{origin:'*'}),但我遇到了同样的问题..:(您注释掉'addHook'并使用'fastfy cors',但仍然在JSON.parse()的位置0处获得'SyntaxError:Unexpected token u'?否,在这种情况下,在尝试从swagger获取资源时获得以下错误:TypeError:NetworkError。)