Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Swagger在Fastify NodeJS中尝试获取资源时发送以下错误:TypeError:NetworkError_Node.js_Swagger_Fastify - Fatal编程技术网

Node.js Swagger在Fastify NodeJS中尝试获取资源时发送以下错误:TypeError:NetworkError

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

我运行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 ()
在我搜索了它之后,我发现我应该在代码中添加玉米。因此,我在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。)