我正在阅读一本名为" Node Beginner Book"的电子书。它基本上是一个巨大的~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;
router.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
,所以我理解基本上应用& #39;生活'在index.js中,运行差事并在其他模块中工作。
这里的问题是...... server.js
指的是函数route()
,但并没有明确要求router.js
这是定义{{1}的模块}}。
route()
是否为其包含的模块设置范围?由于index.js
中包含router.route
,index
是否可以访问server
范围而无需明确知道index
来自何处?
Javascript非常松散,以至于这些'懒惰'有点事情证明有点挑战我的头脑。
答案 0 :(得分:3)
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);
所以它实际上正在做的是调用server.js中的start函数并将router.route作为参数'route'
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;
这里你要导出start函数,这就是为什么你可以像index.js中的var server = require('./server').start(router.route, handle)
一样访问它。