如何将json文件从节点发送到angularjs

时间:2015-11-14 18:31:31

标签: json angularjs node.js

我想要做的是将我的网站的所有静态保存在我想以角度阅读的json文件中,我正在考虑两种方法:

  1. 直接从AngularJS
  2. 调用json文件
  3. 将json文件从节点发送到AngularJS
  4. 我不知道怎么做他们中的任何一个,我尝试过这样的第二种方式(没有运气):

    Nodejs代码:

    app.get( '/content', function ( require, response ) {
        response.setHeader('Content-Type', 'application/json');
        response.json( readJSONFile( './client/content.json', function ( err, json ) {
                if ( err ) {
                    throw err;
                }
                console.log( json );
            } )
        )
    } );
    
    function readJSONFile( filename, callback ) {
        require( "fs" ).readFile( filename, function ( err, data ) {
            if ( err ) {
                callback( err );
                return;
            }
            try {
                callback( null, JSON.parse( data ) );
            } catch ( exception ) {
                callback( exception );
            }
        } );
    }
    

    当我访问localhost:3000/content并且我在浏览器上检查网络时发送了文件,但我无法在预览选项卡中看到数据,不确定我做错了什么...

    另外,如何在AngularJS中提供从服务器获取此数据的服务?

1 个答案:

答案 0 :(得分:1)

因此,您的问题可以分解为2个(完全)单独的问题。我们一个接一个地走吧:

1。如何从Node.js应用程序

提供json文件

您的代码无效的原因是您以“错误的顺序”执行了此操作。您的readJSONFile函数是asynchronous函数,其中json文件的内容仅在一段时间后可用,当Node的回调块时调用readFile函数。在这里,您尝试使用readJSONFile立即返回值作为response.json的参数,这意味着undefined。这就是为什么你在预览标签中看不到任何数据的原因。

解决方案:

一个。为简单起见,您可以使用readFileSync

app.get( '/content', function ( request, response ) {
    response.json( require('fs').readFileSync('./client/content.json', 'utf8') );
}

湾或者通过Node.js的异步签名(也是一种更好的实践)来生活,你可以这样做:

app.get( '/content', function ( request, response ) {
    readJSONFile( './client/content.json', function ( err, json ) {
        if ( err ) {
            throw err;
        }
        return response.json( json );
    } );
} );

我建议你google readFilereadFileSync对这些原生Node.js API有更深入的了解。无论哪种方式,这两种方法都应该在控制台预览选项卡中为您提供一些数据。现在剩下的就是下一个问题:

2。如何从AngularJS

向HTTP端点发出请求

说实话,这是一个“大问题”,不是因为解释起来很困难或太复杂,而是因为有很多不同的方法可以解释。快速回答是告诉您使用Angular的原生 $ http 服务,或 ngResource ,或多功能的 Restangular ;虽然我可以在这篇文章中继续讨论这些内容,但我认为StackOverflow关于这个主题有更好的答案,例如this one

同样,我个人建议您对以上3个关键字进行更多研究。如果之后事情看起来仍然模糊不清,你可能总会回到这里并发出一个更详细的问题,例如:“如何使用<NAME>”通过<NAME>从AngularJS向服务器发出HTTP请求,{{1} } $ http ngResource Restangular ,我(或任何其他活跃用户)将非常乐意回答!