在建立安全 TLS 连接之前,Netlify 和 Faunadb 客户端网络套接字断开连接

Posted

技术标签:

【中文标题】在建立安全 TLS 连接之前,Netlify 和 Faunadb 客户端网络套接字断开连接【英文标题】:Netlify & Faunadb Client network socket disconnected before secure TLS connection was established 【发布时间】:2021-09-15 07:33:07 【问题描述】:

我仅在生产模式下调用 Netlify AWS 无服务器函数时收到以下错误

ERROR FetchError: 对https://registry.npmjs.org/faunadb 的请求失败,原因:客户端网络套接字在建立安全 TLS 连接之前已断开连接 在客户端请求。 (/var/task/node_modules/node-fetch/lib/index.js:1461:11) 在 ClientRequest.emit (events.js:314:20) 在 TLSSocket.socketErrorListener (_http_client.js:427:9) 在 TLSSocket.emit (events.js:314:20) 在 emitErrorNT (internal/streams/destroy.js:92:8) 在 emitErrorAndCloseNT (internal/streams/destroy.js:60:3) 在 processTicksAndRejections (internal/process/task_queues.js:84:21) 类型:'系统', 错误号:'ECONNRESET', 代码:'ECONNRESET'

代码如下:

const faunadb = require('faunadb');
q = faunadb.query;
var fauna_client = new faunadb.Client( secret: '[..]' );

const redirect_uri = "/.netlify/functions/follow_spotify_callback";
const client_id = "[..]";
const client_secret = "[..]";
const basic =  Buffer.from(client_id + ":" + client_secret).toString('base64');

const qs = require('querystring');
const axios = require('axios');

exports.handler = async function(event, context) 

    const state = JSON.parse(event.queryStringParameters.state)


    axios.post(
        'https://accounts.spotify.com/api/token',
        qs.stringify(
            'grant_type': 'authorization_code',
            'code': event.queryStringParameters.code,
            'redirect_uri': process.env.URL + redirect_uri
        ),
        
            headers: 
                'Authorization': `Basic $basic`,
                'Content-Type': 'application/x-www-form-urlencoded'
            
        
    ).then(res => 
        const access_token = res.data.access_token;
        const headers = 
            'Authorization': `Bearer $res.data.access_token`,
            'Content-Type': 'application/json'
        
        axios.get(
            "https://api.spotify.com/v1/me",
            
                headers: headers,
            
        ).then(result => 

            fauna_client.query(
                q.Exists(
                    q.Match(
                        q.Index('users_by_id'),
                        result.data.id
                    )
                )
            ).then(ret => 
                if (ret == false)
                    fauna_client.query(
                        q.Create(
                            q.Collection('users'),
                             data:  
                                display_name: result.data.display_name,
                                id: result.data.id,
                                access_token: access_token,
                                campaign: state.artisturi,
                                playlist: state.playlisturi,
                                referred_by: state.referrer
                             
                        )
                    )
                else
                    console.log("user already exists")
                
            )
            .catch(err => console.log(err));
        
        ).catch(err =>
            console.log(err.message)
        );
        axios.put('https://api.spotify.com/v1/me/following?type=artist', 
            'ids': [state.artisturi],
        , 
            headers: headers
        );
        axios.put(`https://api.spotify.com/v1/playlists/$state.playlisturi/followers`, 
            'public': true,
        , 
            headers: headers,
        );
        axios.put('https://api.spotify.com/v1/me/tracks', 
            'ids': [state.trackuri],
        , 
            headers: headers,
        )
    ).catch(err =>
        console.log(err.message)
    )

    return
        statusCode: 302,
        headers: 
            Location: 'https://open.spotify.com/playlist/'+state.playlisturi
        
    

一切都在本地运行netlify dev,但不是在生产模式下,它是在带有 SSL / TLS 加密的 https 上

【问题讨论】:

【参考方案1】:

您似乎遇到了此处描述的问题:https://docs.fauna.com/fauna/current/drivers/known_issues

如果将实例化 Fauna 客户端的代码移到处理程序逻辑中,问题可能会消失。

【讨论】:

以上是关于在建立安全 TLS 连接之前,Netlify 和 Faunadb 客户端网络套接字断开连接的主要内容,如果未能解决你的问题,请参考以下文章

“在建立安全 TLS 连接之前断开客户端网络套接字” - Neo4j/GraphQL

客户端网络套接字在建立安全 TLS 连接之前断开连接 Node.js v13.0.1

Neo4jError:客户端网络套接字在建立安全 TLS 连接之前断开

解决“基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系“的问题

错误:C# 底层连接已关闭:无法为 SSL/TLS 安全通道建立信任关系

通信安全—docker建立客户端与服务端TLS证书连接