我想要做的是将我的网站的所有静态保存在我想以角度阅读的json文件中,我正在考虑两种方法:
我不知道怎么做他们中的任何一个,我尝试过这样的第二种方式(没有运气):
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中提供从服务器获取此数据的服务?
答案 0 :(得分:1)
因此,您的问题可以分解为2个(完全)单独的问题。我们一个接一个地走吧:
您的代码无效的原因是您以“错误的顺序”执行了此操作。您的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 readFile
和readFileSync
对这些原生Node.js API有更深入的了解。无论哪种方式,这两种方法都应该在控制台预览选项卡中为您提供一些数据。现在剩下的就是下一个问题:
说实话,这是一个“大问题”,不是因为解释起来很困难或太复杂,而是因为有很多不同的方法可以解释。快速回答是告诉您使用Angular的原生 $ http 服务,或 ngResource ,或多功能的 Restangular ;虽然我可以在这篇文章中继续讨论这些内容,但我认为StackOverflow关于这个主题有更好的答案,例如this one。
同样,我个人建议您对以上3个关键字进行更多研究。如果之后事情看起来仍然模糊不清,你可能总会回到这里并发出一个更详细的问题,例如:“如何使用<NAME>
”通过<NAME>
从AngularJS向服务器发出HTTP请求,{{1} } $ http , ngResource 或 Restangular ,我(或任何其他活跃用户)将非常乐意回答!