3

我是 node.js 的新手。我的项目中有 server.js 、 router.js 、 index.js 和 requestHandler.js 文件。我在下面的 url 中通过 start 或上传

http://localhost:8888/start

我从 url 获取 pathName 并将其传递给服务器中的 router.js,如下所示:

服务器.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("Request for " + pathname + " received.");
    route(handle,pathname);
    response.writeHead(200, {"Content-Type": "text/plain"});
    response.write("Hello World");
    response.end();
}
http.createServer(onRequest).listen(8888);
console.log("Server has started.");
}
exports.start = start;

路由器.js:

function route(handle,pathname){
console.log("About to route a request for "+ pathname );
if(typeof handle[pathname]==='function'){
    handle[pathname]();
}else{
    console.log("No request handler found for "+pathname);
}
}
exports.route = route ; 

index.js:

var server = require("./Server");
var router = require("./router");
var requestHandlers = require("./requestHandler");

var handle={}
handle["/"]=requestHandlers.start;
handle["/start"]=requestHandlers.start;
handle["/upload"]=requestHandlers.upload;

server.start(router.route,handle);

requestHandler.js :

function start(){
console.log("Request handler 'start' was called.");
}

function upload(){
console.log("Request handler 'upload' was called.");
}

exports.start=start;
exports.upload=upload;

我得到错误的结果:

PS C:\Program Files\nodejs> node ..\..\Users\private\Desktop\hello\index.js
Server has started.
Request for /start received.
About to route a request for /start
No request handler found for undefined
Request for /favicon.ico received.
About to route a request for /favicon.ico
No request handler found for undefined
Request for /favicon.ico received.
About to route a request for /favicon.ico
No request handler found for undefined

而不是这个:

Server has started.
Request for /start received.
About to route a request for /start
Request handler 'start' was called.

问题是什么?任何想法?

4

2 回答 2

1

我在我的机器上尝试了你的代码(Mac OS X + v0.8.9)。它运作良好。控制台输出为:

Server has started.
Request for /start received.
About to route a request for /start
Request handler 'start' was called.
Request for /favicon.ico received.
About to route a request for /favicon.ico
No request handler found for /favicon.ico

您遇到错误的原因很棘手。你能检查你的节点版本吗?

从您的日志数据来看,问题出route(handle,pathname)在 router.js 中定义的函数中。pathname 的值从"/start"更改为undefined。也许你需要调试这个函数来找出原因。

于 2013-07-14T02:16:34.017 回答
0

我也遇到了这个问题。似乎自上次编辑以来我还没有保存 server.js 。

于 2013-10-29T15:42:22.287 回答