我试图在网上关注创建NodeJS服务器和路由器的示例,但遇到了问题。接下来主要是一些其他代码的示例。
Index.js
var server = require("./server");
var router = require("./router");
server.start(router.route);'
Router.js
var fs = require("fs");
function route(filename) {
fs.readFile(filename, 'utf8', function (err, data) {
if (err) {
console.log('Error: ' + err);
return;
}
console.log("About to route a request for " + filename);
data = JSON.parse(data);
})
}
exports.route = route;
Server.js
var http = require('http');
var url = require("url");
function start(route) {
function onRequest(request, response) {
var filename = request.url.substr(1);
// call for specific json file here
if (filename == "favicon.ico") {
response.writeHead(200, {'Content-Type': 'image/x-icon'} );
response.end();
console.log('favicon requested');
return;
}
else {
filename += ".json";
console.log("Request for " + filename + " received.");
response.writeHead(200, { 'Content-Type': 'application/json', "Access-Control-Allow-Origin":"*" });
response.write("" + route(filename),0,4);
response.end();
}
}
http.createServer(onRequest).listen(8124);
}
exports.start = start;
console.log('Server running at http://127.0.0.1:8124/');
我遇到的问题是,路由命令如何工作? 当我浏览到服务器时,我得到的是“未定义”。如何从路由器获取实际的json?
我试过:var result = route(filename);但那失败了。
实质上,如何从路由器获取数据并将其写入响应。如果你还没有猜到,javascript和NodeJS对我来说是个新鲜事。
任何指针都会非常感激。
谢谢。
答案 0 :(得分:0)
您的路线功能有一个异步方法fs.readFile
。您需要将回调传递给路由函数,以便它可以正确地返回数据。否则,route
将立即返回,没有数据(因为它是异步的),无论你在readFile
内是否有返回语句。
router.js
function route(filename, callback) {
fs.readFile(filename, 'utf8', function (err, data) {
if (err) {
console.log('Error: ' + err);
return;
}
console.log("About to route a request for " + filename);
data = JSON.parse(data);
callback(data); // Call this function after the data is grabbed.
})
}
server.js部分:
response.writeHead(200, { 'Content-Type': 'application/json', "Access-Control-Allow-Origin":"*" });
route(filename, function (data) {
response.write("" + JSON.stringify(data),0,4);
response.end();
});