NodeJs 在 http 和 fetchjsonp 之间处理 json

Posted

技术标签:

【中文标题】NodeJs 在 http 和 fetchjsonp 之间处理 json【英文标题】:NodeJs handling json between http and fetchjsonp 【发布时间】:2018-06-30 09:14:32 【问题描述】:

我使用 fetch-jsonp 的应用程序无法从我通过简单 http 模块提供服务的站点读取 JSON。我收到一个错误:“Uncaught SyntaxError: Unexpected token :”,然后是一个超时错误。

我正在尝试 ReactJS,所以把这个 react 组件放在一起

import React,  Component  from 'react';
import fetchJsonp from 'fetch-jsonp';

var data =  'remote':, 'local': ;
var fetched= false;
class FastTable extends Component         

    loadData(url,element) 

        return fetchJsonp(url)
            .then(function(response)                                 
                return response.json(); )
            .then((responseJson) =>                                         
                data[element] = responseJson;                
                this.setState(data);
                return responseJson;
            )
            .catch((error) =>                 
                console.error(error);
            );
    

    render()  
        if (!fetched) 
            this.loadData('https://jsonplaceholder.typicode.com/posts/1','remote'); 
            this.loadData('http://localhost','local'); 
        
        fetched=true;
        return (
            <div><pre>JSON.stringify(data, null, 2) </pre></div>
        );
    


export default FastTable;

它使用 fetchJsonp 从一个有效的测试网站获取 JSON 数据集,然后从我的 http 测试网站获取一个无效的数据集。

测试服务器代码如下:

var http = require('http');

http.createServer(function (req, res) 

    var result = 
        'Bob':'Likes cheese'
    ;
    res.writeHead(200, 'Content-Type': 'application/json');
    res.write(JSON.stringify(result)); 
    res.end(); 

).listen(80); 

我还从我们项目中的其他 JSON 服务器读取的结果好坏参半。

为什么 fetch-jsonp 没有从我的测试站点读取数据?我应该以其他方式读取这些数据吗?

【问题讨论】:

【参考方案1】:

您很可能正在调用不支持的 JSON API JSONP。不同之处在于 JSON API 使用类似的对象进行响应 "data": 123 执行时会抛出上述错误 功能。另一方面,JSONP 会用一个函数来响应 包装对象,如 jsonp_123132(data: 123)。

如果您想使用 JSON API,请尝试使用 axios 或 supergent npm。

【讨论】:

以上是关于NodeJs 在 http 和 fetchjsonp 之间处理 json的主要内容,如果未能解决你的问题,请参考以下文章

Nodejs HTTP 和 HTTPS 在同一个端口上

在 NodeJS 中使用 Lambda@Edge 对 CloudFront 进行基本 HTTP 身份验证

NodeJs 中的 http、https 和 http2

nodejs环境下http2初尝试

nodejs HTTP Headers超长的问题

nodejs入门教程之http的get和request简介及应用