-2

I am trying to have just a simple Chatbot HTML interface with PALM API. I keep getting a fetch error in the debugging console and on the HTML.

Running Node.JS on Server.JS and running http-server on chatbot.JS

SERVER.JS

const http = require('http');
const url = require('url');
const port = 3000;

const server = http.createServer((req, res) => {
  // Add CORS headers
  res.setHeader('Access-Control-Allow-Origin', '*');
  res.setHeader('Access-Control-Allow-Methods', 'POST');
  res.setHeader('Access-Control-Allow-Headers', 'Content-Type');

  try {
    const parsedUrl = url.parse(req.url, true);
    const path = parsedUrl.pathname;

    if (req.method === 'POST' && path === '/chat') {
      let body = '';

      req.on('data', chunk => {
        body += chunk.toString();
      });

      req.on('end', () => {
        const userMessage = JSON.parse(body).message;

        // Simulate a bot response
        const botResponse = 'You said: ' + userMessage;

        res.writeHead(200, { 'Content-Type': 'application/json' });
        res.end(JSON.stringify({ response: botResponse }));
      });
    } else {
      res.writeHead(404);
      res.end('Not Found');
    }
  } catch (error) {
    console.error('An error occurred:', error);
    res.writeHead(500);
    res.end('Internal Server Error');
  }
});

server.listen(port, () => {
  console.log('Server running at http://localhost:' + port);
});

CHATBOT.JS

async function sendMessage() {
    try {
      var userMessage = document.getElementById('userInput').value;
      var messagesDiv = document.getElementById('messages');
  
      // Convert user's message to a string
      const userMessageStr = JSON.stringify({ message: userMessage });
  
      // Display user's message
      messagesDiv.innerHTML += '<div>User: ' + userMessageStr + '</div>';
  
      // Call API
      const response = await fetch('http://localhost:3000/chat', {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json',
        },
        body: userMessageStr,
      });
  
      const data = await response.json();
  
      // Display bot's response
      messagesDiv.innerHTML += '<div>Bot: ' + data.response + '</div>';
    } catch (error) {
      console.error('An error occurred:', error);
      messagesDiv.innerHTML += '<div>Error: ' + error.message + '</div>';
    }
  }
  

INDEX.HTML

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Chatbot</title>
    <script src="chatbot.js" defer></script>
</head>
<body>
    <div id="chatbox">
        <div id="messages"></div>
        <input type="text" id="userInput" placeholder="Type your message...">
        <button onclick="sendMessage()">Send</button>
    </div>
</body>
</html>
Linda Lawton - DaImTo
  • 106,405
  • 32
  • 180
  • 449
  • Ok, so let me get this right. You got an error, but you refuse to actually share that error?? How exactly do you expect anyone to answer? Magic? What is wrong with you? – JK. Aug 24 '23 at 04:31

0 Answers0