Expressjs res.json在体内呈现html和json

时间:2016-08-31 16:41:41

标签: javascript json node.js express

我有路由器将json数据发送到客户端,如下所示:

router.get('/', function(req, res, next) {
    UserModel.selectAllUsers(function(err, vals){
        if(err){
            console.log(err);
        }
        res.json({d: vals});    
    });
});

当我在浏览器中访问路线时,我会打印出有效的json:

{"d":[{"id":1,"name":"arian","sex":"male"},{"id":2,"name":"eni","sex":"female"}]}

但是当我在浏览器开发者工具中检查视图时,我看到:

<html>
   <head></head>
   <body>
     <pre style="word-wrap: break-word; white-space: pre-wrap;">{"d":   [{"id":1,"name":"arian","sex":"male","race":"caucassian"},{"id":2,"name":"eni","sex":"female","race":"caucassian"}]}</pre>
   <body>
</html>

不应该res.json()将内容类型设置为application / json吗?为什么我要用html包装JSON?

1 个答案:

答案 0 :(得分:3)

大多数浏览器没有专门针对JSON(或任何其他内容类型)的单独渲染器。要在不正确格式化的情况下呈现JSON,Chrome等浏览器会将其显示为包含在样式化HTML预标记中的文本。如果加载图像文件imgur.com/foo.png,您会注意到相同的情况 - HTML将只是一个图像标记,其源设置为该URL。

要查看服务器实际传输的内容,您可以打开浏览器的开发人员工具。在Chrome中,您可以按F12,然后转到“网络”标签,其中会列出您的所有请求及其内容。