title: SSL_PROTOCOL_ERROR, Post request, client, api, ssl
body: <p>I am receiving the following error: <code>(index):24 POST https://goldengates.club:3000/api/transact net::ERR_SSL_PROTOCOL_ERROR
  (anonymous) @ (index):24
  goldengates.club/:1 Uncaught (in promise) TypeError: Failed to fetch
  Promise.then (async)
  (anonymous) @ (index):26</code> when trying to make a post request from client side to my api backend. I have opened port 3000 with express to take requests on an endpoint named api/transact where the client posts data to. The problem seems to be with my current ssl but I don't know what the problem is specifically.
  I checked in with the server provider and they told me quote "You may need to reconfigure your application running on port 3000 to use SSL to encrypt data. If you require certificate files, they should be available in ssl directory in the user's account." Incase this gives a hint.</p>
  
  <p>Relevant Server API code:</p>
  
  <pre><code>const Blockchain = require('./blockchain');
  const PubSub = require('./app/pubsub');
  const TransactionPool = require('./wallet/transaction-pool');
  const Wallet = require('./wallet');
  const TransactionMiner = require('./app/transaction-miner');
  const PubSubNub = require('./app/pubsub.pubnub');
  //127.0.0.1:6379
  const isDevelopment = process.env.ENV === 'development';
  //TRY PUBNUB (comment out)
  /*const REDIS_URL = isDevelopment ?
    'redis://127.0.0.1:6379' : //try 6379 19289
    'redis://h:p602b6838e89da65c8c4d29a6a4f954452d1ece59c10b27a29ebf9808721cb8e2@ec2-35-153-115-238.compute-1.amazonaws.com:9819'//19289
  */  
  const DEFAULT_PORT = 3000;
  const ROOT_NODE_ADDRESS = 
  `http://localhost:${DEFAULT_PORT}`;
  
  const app = express();
  const blockchain = new Blockchain();
  const transactionPool = new TransactionPool();
  const wallet = new Wallet();
  //const pubsub = new PubSub({ blockchain, transactionPool, redisUrl: REDIS_URL });//redis
  const pubsub = new PubSubNub({ blockchain, transactionPool, wallet }); // for PubNub //change back to PubSub if issues arise
  const transactionMiner = new TransactionMiner({ blockchain, transactionPool, wallet, pubsub });
  //DELETE THIS
  /*const config =
  {
      headers: {'Access-Control-Allow-Origin':'*'}
  };*/
  //TEST DELETE
  
  app.use(bodyParser.json());
  app.use(express.static(path.join(__dirname, 'client/dist')));
  //delete below
  //app.options('*', cors());
  
  app.use(cors({
      origin: 'https://goldengates.club',
      allowedHeaders: ["Content-Type"],
      methods: 'POST'
  }));
  
  SKIPPING TO FoCUSED ENDPOINT...
  
  app.post('/api/transact',(req, res) =&gt; {
  
    const { amount, recipient } = req.body;
    //REMOVE
    console.log(amount);
    //REMOVE
    let transaction = transactionPool
      .existingTransaction({ inputAddress: wallet.publicKey });
  
    try {
      if (transaction) {
        transaction.update({ senderWallet: wallet, recipient, amount });
      } else {
        transaction = wallet.createTransaction({
          recipient,
          amount,
          chain: blockchain.chain
        });
      }
    } catch(error) {
      return res.status(400).json({ type: 'error', message: error.message });
    }
  
    transactionPool.setTransaction(transaction);
  
    pubsub.broadcastTransaction(transaction);
  
    res.json({ type: 'success', transaction });
  });
  </code></pre>
  
  <p>Client side code:</p>
  
  <pre><code>&lt;!DOCTYPE html&gt;
  
  &lt;html&gt;
      &lt;head&gt;
  
      &lt;/head&gt;
      &lt;body&gt;
  
      &lt;script&gt;
          const amount=10;
          const recipient=1221232;
          const data={amount,recipient};
  
          const options=
          {
              method: 'POST',
              headers:
              {
                  'Content-Type': 'application/json',
              },
  
              body: JSON.stringify(data)
          };
          fetch('https://www.goldengates.club:3000/api/transact',options)
          .then(response =&gt; response.json())
          .then(data =&gt; console.log(data));
      &lt;/script&gt;
      &lt;/body&gt;
  &lt;/html&gt;
  </code></pre>