📜  nodejs 响应是 html 而不是 json 数据 - Javascript (1)

📅  最后修改于: 2023-12-03 15:03:15.950000             🧑  作者: Mango

Node.js响应是HTML而不是JSON数据

在Node.js中,我们经常需要向客户端发送响应。响应可以是HTML、JSON、XML或任何其他格式的数据。然而,有时我们会发现我们的应用程序向客户端发送HTML响应而不是JSON响应。

问题

以下是一个简单的Express应用程序,该应用程序使用JSON作为API的响应。

const express = require('express');
const app = express();

app.get('/api/users', (req, res) => {
  const users = [
    { id: 1, name: 'Alice' },
    { id: 2, name: 'Bob' },
  ];

  res.json(users);
});

app.listen(3000, () => console.log('Server started'));

我们期望从/api/users端点接收JSON响应。但实际上,我们收到的是HTML响应,类似于以下内容:

<!DOCTYPE html>
<html>
  <head>
    <title>Error</title>
  </head>
  <body>
    <pre>Cannot GET /api/users</pre>
  </body>
</html>

这是因为浏览器尝试获取我们请求的URL作为HTML页面,但我们的应用程序无法处理这个请求。因此,浏览器向我们发送错误页面作为响应。

原因

在Express应用程序中,每个路由都必须有对应的处理程序函数。如果您的应用程序不具有某些路由(例如,/api/users),那么您将收到默认的“Cannot GET”错误页面。

解决方案

要解决此问题,请确保您的应用程序具有适当的路由和处理程序函数。确保您的路由与您在客户端中发送的请求URL匹配。

const express = require('express');
const app = express();

// Add the route for /api/users
app.get('/api/users', (req, res) => {
  const users = [
    { id: 1, name: 'Alice' },
    { id: 2, name: 'Bob' },
  ];

  // Send JSON data
  res.json(users);
});

// Add the default route
app.get('*', (req, res) => {
  // Send HTML data
  res.send(`
    <!DOCTYPE html>
    <html>
      <head>
        <title>My App</title>
      </head>
      <body>
        <h1>Welcome to my app</h1>
      </body>
    </html>
  `);
});

app.listen(3000, () => console.log('Server started'));

在上面的例子中,我们添加了一个适当的路由和一个处理程序函数来处理/api/users路由。我们还添加了一个默认路由,该路由将处理任何其他请求。在这种情况下,我们向客户端发送HTML响应。

结论

在Node.js中,确保您的应用程序具有适当的路由和处理程序函数非常重要。这将有助于确保您的应用程序向客户端发送正确的响应,无论客户端发送的请求是什么格式的数据。