Node.js中的依赖注入

时间:2011-12-01 13:45:50

标签: node.js dependency-injection

我正在阅读关于Node.js网络服务器的这个很好的教程:http://nodebeginner.org/ 在本教程的这一部分:http://nodebeginner.org/#whats-needed-to-route-requests中,他们展示了如何执行称为“注入依赖关系”的操作,以便将路由模块和服务器模块链接到主js文件 index.js

我已经尝试了他们在那里写的东西,但计算机不会喜欢这个。它向我显示一条错误消息: route is not defined '。 我不知道该怎么做,请帮我解决这个问题。我对Node.js很新,以前从未见过这种依赖注入。
谢谢!

以下是index.js的内容:

var server = require("./myHttp");
var router = require("./router");

server.start(router.route);

这是myHttp.js文件:

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

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

  route(pathname);

  response.writeHead(404, {"Content-Type": "text/plain"});
  response.write("Hello World");
  response.end();
}

http.createServer(onRequest).listen(8888);
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;  

我在cmd中运行以下命令:节点index.js

2 个答案:

答案 0 :(得分:1)

使用参数调用

server.start(router.route);。声明function start(){没有参数。从未使用过这些论点。那为什么呢?

然后,参数的值为router.route。这只是功能本身。它不会被称为任何地方。

答案 1 :(得分:0)

您需要将路由器文件包含在myHttp.js文件中:

var http = require("http");
var url = require("url");
var router = require("./router");

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

  route(pathname);

  response.writeHead(404, {"Content-Type": "text/plain"});
  response.write("Hello World");
  response.end();
}

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

exports.start = start;  

现在你的index.js中你必须这样做:(这里不需要路由器)

var server = require("./myHttp");

server.start();