我无法从节点初学者手册中关注以下代码段

时间:2017-01-30 16:41:20

标签: javascript node.js

app.js server.js router.js 是3个文件

app.js

var server = require('./server');
var router = require('./router'); //here we are requiring the module
server.start(router.route);

server.js

var http = require("http");
var url = require("url");
function  start(route){
    function onRequest(request, response) {
        var pathname = url.parse(request.url);
        console.log("request for " + pathname + " recieved");

                            //in this line we are using route function  
        route(pathname);    //which is in router.js 
                            //why are we not requiring the module ie     require('./router')

        response.writeHead(200, {"Content-Type": "text/plain"});
        response.write("Hello World");
        response.end();
    }
    http.createServer(onRequest).listen(8080);
    console.log("Server has started.");
}
exports.start = start;

router.js

function route(pathname){
    console.log("About to route a request for "+pathname);
}
exports.route = route;

为什么我们不要求server.js文件中的 router.js require('./router');

2 个答案:

答案 0 :(得分:0)

正如您所看到的,server.js不需要routes.js文件,因为它作为server.js上函数start的参数传递。

说到这一点,我看到你的代码中出现错误,server.js上的启动函数应该有一个" route"参数。

然后当你实例化你的app.js时,你需要两个,但是当你调用start并发送那个参数时,之后你不需要再次导入routes.js,因为它已经作为参考。< / p>

如果能回答你的问题,请告诉我。

最佳, 达里奥

答案 1 :(得分:0)

  

为什么我们不要求server.js文件中的router.js

因为没有必要。 <{1}}并不需要server.js模块。

router中的代码调用app.js&#39; s server作为参数传递路径信息。但start不接受任何参数,因此它不会将该参数用于任何参数。也许在本教程的后面,他们将开始使用路由信息。

但重点是start并不需要server.js它,因为它接收它(或者在代码更新后的某个时刻收到它)作为{require的参数{1}}。