从 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的主要内容,如果未能解决你的问题,请参考以下文章