从 NodeJs 获取 HTML 而不是 JSON

Posted

技术标签:

【中文标题】从 NodeJs 获取 HTML 而不是 JSON【英文标题】:Getting HTML instead of JSON from NodeJs 【发布时间】:2020-11-25 21:44:13 【问题描述】:

我正在处理包含应用程序和登录页面的项目。我们将 Nodejs 与 Axios 和 VueJs 一起用于应用程序部分。但是对于登陆页面,它是简单的 jQuery。我必须对登陆页面进行一些 API 调用,但我无法使用 NodeJs 结果导致 jQuery 在我的登陆页面中提供数据。我是 NodeJs 和这些技术的新手。 这是我的代码:

我的路线:

const router = express.Router();
...
router.get('/api/items', myApiController.getItems);

NodeJs 控制器

 module.exports.getItems = (req, res) => 
    const response = myApiController.getItems();

    if (response.status === 200) 
      res.send(
      status: 200,
      data: response.data
    )
   else 
    res.send(
    status: 404,
    data: null
    )
  

我的主要脚本:

$.get("/api/items", function(data, status)
    alert("Data: " + data);
    var mylist = $("#mylist");
    $.each(data, function(item) 
      mylist.append($("<option />").val(item.name).text(item.name));
    );
);

即使我得到 status:200,nodejs 也会返回第 404 页的 html。 我找不到原因,老实说,我不明白原因。似乎是试图让一个页面不存在,但我正在从函数请求一个 json。 我尝试用垃圾 json 替换 contoller 方法调用,但没有任何效果。 这是我尝试的方法:

router.get('/api/items', function(req, res)
  console.log('cc');
  return res.json([
    'toto': 'toto',
    'tata': 'tata',
  ]);
);

似乎路由定义有问题,但我不知道如何解决。这可能与快速路由器有关吗?你能解释一下并帮我解决这个问题吗?谢谢

【问题讨论】:

您没有在代码中的任何位置指定application/json 作为内容类型吗? 我认为我们需要myApiController.getItems 的代码,因为它会返回一个您在if/then 中使用的响应对象,以决定将什么传递给res.send() 我不认为是 myApiController 的问题。你能检查我最后的代码部分吗?我将函数关联到路由器,结果是一样的。 @user3788685 不,我正在尝试通过简单的可能方式来做。但正如我所说,我是这个应用程序架构的新手。您对我如何更改内容以获取列表有任何想法吗?谢谢 @Cutis - 查看this 问题并回答它可能会有所帮助,因为我们在上面看到的代码不够多 【参考方案1】:

当您使用字符串进行响应时,内容类型将为 HTML。试试这个,它会删除 res.json 调用:

router.get('/api/items', function(req, res)
  console.log('cc');
  return [
    'toto': 'toto',
    'tata': 'tata',
  ];
);

【讨论】:

我不知道我发布的代码最后一部分的区别。但是我尝试了一下,我遇到了同样的问题。可能是什么问题?

以上是关于从 NodeJs 获取 HTML 而不是 JSON的主要内容,如果未能解决你的问题,请参考以下文章

如何从get请求获取json响应而不是html响应?

NodeJS:从 SQL 查询中获取 JSON

在android中获取HTML响应而不是JSON

如何从sql中获取nodejs的数据并返回json?

从json文件获取数据到Nodejs(Protractor代码)

Axios.get 返回纯 html 而不是 JSON 返回数据