使用NodeJS的基本尝试

时间:2014-01-22 17:10:25

标签: javascript node.js

我试图在网上关注创建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对我来说是个新鲜事。

任何指针都会非常感激。

谢谢。

1 个答案:

答案 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();
});