Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 学习节点。js。。。好奇的范围_Javascript_Node.js - Fatal编程技术网

Javascript 学习节点。js。。。好奇的范围

Javascript 学习节点。js。。。好奇的范围,javascript,node.js,Javascript,Node.js,我正在读一本叫做“节点入门书”的电子书。这基本上是一个50页的大练习,涵盖了一系列基础知识。我最近一直在python中工作,并且从过去的生活中学习php。因此,当这本书说它是为“至少有一种面向对象语言(如Ruby、Python、PHP或Java)经验的人设计的,而这些语言只有很少的经验”时,我觉得这是我的拿手好戏 体验JavaScript,对Node.js来说是全新的。” 以下是上下文: index.js var server = require("./server"); var route

我正在读一本叫做“节点入门书”的电子书。这基本上是一个50页的大练习,涵盖了一系列基础知识。我最近一直在python中工作,并且从过去的生活中学习php。因此,当这本书说它是为“至少有一种面向对象语言(如Ruby、Python、PHP或Java)经验的人设计的,而这些语言只有很少的经验”时,我觉得这是我的拿手好戏 体验JavaScript,对Node.js来说是全新的。”

以下是上下文:


index.js

var server =  require("./server");
var router =  require("./router");
var requestHandlers = require("./requestHandlers");
var handle = {}
handle ["/"] = requestHandlers.start;
handle ["/start"] = requestHandlers.start;
handle ["/upload"] = requestHandlers.upload;

server.start(router.route, handle);

server.js

var http = require("http");
var url = require("url");

function start(route, handle) {
    function onRequest(request, response) {
        var pathname = url.parse(request.url).pathname;
        console.log("> Rcvd: " + pathname);

        route(handle, pathname, response);
    }

    http.createServer(onRequest).listen(8888);
    console.log("Server has started");
}

exports.start = start;

路由器.js

function route(handle, pathname, response) {
    console.log("Routing: " + pathname);
    if (typeof handle[pathname] === 'function'){
        return handle[pathname](response);
    } else {
        console.log("ReqH ERR: No handler for " + pathname);
        response.writeHead(404, {"Content-Type": "text/plain"});
        response.write("404 Not Found");
        response.end();
    }
}

exports.route = route;

requestHandlers.js

var exec = require("child_process").exec;

function start(response) {
    console.log("Request handler 'start' was called.");
    var content = "empty";

    exec("ls -lah", function (error, stdout, stderr) {
        response.writeHead(200, {"Content-Type": "text/plain"});
        response.write(stdout);
        response.end();
    });

    return content;
}

function upload(response){
    console.log("ReqH: upload");
    response.writeHead(200, {"Content-Type": "text/plain"});
    response.write("From upload()");
    response.end();
}

exports.start = start;
exports.upload = upload;
然后通过
node index.js
启动应用程序

好的,我看到“执行顺序”,或者说应用程序所采用的路径,从包含
server.js
router.js
开始,所以我知道应用程序基本上“生活”在index.js中,跑腿并在其他模块中工作

问题是
server.js
引用函数
route()
,但不明确要求定义
route()
的模块
router.js

index.js
是否为它包含的模块设置范围?既然
router.route
包含在
index
中,那么
server
是否可以访问
index
es范围,而不必明确知道
route()
的来源


Javascript是如此的松散,以至于这些“懒惰”的东西对我来说是一种挑战。

阅读CommonJS->

index.js 所以它实际上是在server.js和passign router.route中调用start函数作为参数'route'

server.js
在这里导出start函数,这就是为什么可以像这样访问它。
var server=require('./server').start(router.route,handle)
在index.js中

将函数传递给server.start(router.route,handle);事实上,既然你指出了这一点,作者实际上解释了这一点。当我在看下面的代码时,我想我忘了他是这么说的。归根结底,start()并不是指任何东西,它只是处理给定的内容。谢谢。因为
var server=require('./server')
exports.start=start
是通用的JS语法,了解幕后实际发生的事情很重要,越不神奇越清晰…;)
var server =  require("./server");
var router =  require("./router");

...
// here you are passing in the route method as the route param
server.start(router.route, handle);
   var http = require("http");
    var url = require("url");
    
    // here route is just the name of the param 
    function start(route, handle) {
        function onRequest(request, response) {
            var pathname = url.parse(request.url).pathname;
            console.log("> Rcvd: " + pathname);
    
            route(handle, pathname, response);
        }
    
        http.createServer(onRequest).listen(8888);
        console.log("Server has started");
    }
    
    exports.start = start;