调用json数据的Node.js问题

我有一些从JSON文件获取JSON数据的问题,首先这里是错误: "NetworkError: 404 Not Found - http://localhost:8000/channels.json"

下面是在我的html文件中获取json数据的代码:

  <div id="result"></div> <script type="text/javascript"> // read episodes in channel function ajaxRequest(){ if (window.XMLHttpRequest) // if Mozilla, Safari etc return new XMLHttpRequest(); else return false; } var mygetrequest=new ajaxRequest(); mygetrequest.onreadystatechange=function(){ if (mygetrequest.readyState==4){ if (mygetrequest.status==200 || window.location.href.indexOf("http")==-1){ var jsondata=eval("("+mygetrequest.responseText+")"); //retrieve result as an JavaScript object var rssentries=jsondata.channels; var output='<ul>'; for (var i=0; i<rssentries.length; i++){ output+='<li>'; output+=rssentries[i].channel_id+'</a><br>'; output+='<a href="multiroom.html">'+rssentries[i].name+'</a>'; output+='</li>'; } output+='</ul>'; document.getElementById("result").innerHTML=output; }else{ alert("An error has occured making the request"); } } } mygetrequest.open("GET", "channels.json", true); mygetrequest.send(null); </script> 

所以HTML工程独自站立,但是当我尝试呈现它在我的节点服务器,我得到错误,在我的节点服务器中的代码快递:

 var express = require('express'); var http = require('http'); var app = express(); var server = module.exports = http.createServer(app); server.listen(8000); console.log("Express server listening on port 8000 in %s mode"); app.set('views', __dirname + '/views'); app.engine('html', require('ejs').renderFile); app.get('/episodes', function(req, res){ res.render('episodes.html'); }); 

所以我不得不在服务器上执行json数据调用,以避免错误,没有其他办法?

如果你在服务器上渲染,你不能使用Ajax。 Ajax只能在浏览器中运行,而不能在服务器上运行。 在服务器上,您必须直接读取文件,将其传递给渲染器,并将其呈现在模板中。 例如:

 var fs = require('fs'); app.get('/episodes', function(req, res){ fs.readFile('./public/channels.json', 'utf8', function (err, data) { var channels = JSON.parse(data); res.render('episodes.html', channels); }); }); 

在您的ejs模板中,您必须直接将通道呈现在页面中。

另一个与Maxbuild议一致的select是使用res.format()来返回你想要的特定内容types。

http://expressjs.com/api.html#res.format

 res.format({ text: function(){ res.send(...); }, html: function(){ res.send(...); }, json: function(){ fs.readFile('./public/channels.json', 'utf8', function (err, data) { var channels = JSON.parse(data); res.send(channels); }); } });