在node.js中的Webserver错误的path

我试图使用node.js作为networking服务器,我的来源被分成四个模块。

  • index.js
  • server.js
  • router.js
  • requestHandlers.js

代码的目的是显示在/,/开始和/或上传不同的页面,而如果我键入另一个path,我应该得到错误404。但是,我发送错误,只要我发送请求到服务器。

这是我的错误:

> Server has started. Request for /start received. About to route a > request for /start Request handler 'start' was called. > > http.js:852 > throw new TypeError('first argument must be a string or Buffer'); > ^ TypeError: first argument must be a string or Buffer > at ServerResponse.OutgoingMessage.write (http.js:852:11) > at Server.onRequest (/Users/Alessio/Desktop/Circolare/server.js:12:14) > at Server.emit (events.js:98:17) > at HTTPParser.parser.onIncoming (http.js:2113:12) > at HTTPParser.parserOnHeadersComplete [as onHeadersComplete] (http.js:122:23) > at Socket.socket.ondata (http.js:1971:22) > at TCP.onread (net.js:528:27) 

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

router.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); return "404 Not Found"; } } exports.route = route; 

requestHandlers.js

 function start(){ console.log("Request handler 'start' was called."); return "Hello Start"; } function upload(){ console.log("Request handler 'upload' was called."); return "Hello Upload"; } exports.start=start; exports.upload=upload; 

看起来你没有从你的route()函数return任何成功的东西:

 function route(handle, pathname){ console.log("About to route a request for " + pathname); if(typeof handle[pathname] === 'function'){ return handle[pathname](); // <-- probably need a `return` statement here... } else{ console.log("No request handler found for " + pathname); return "404 Not Found"; } } 

你可以通过添加一个返回函数调用handlepathname来更新路由函数,它应该工作。

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