在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;