node.js请求处理程序不会调用一个函数
我正在采取node.js的第一步,遇到了一个问题,当试图路由请求我的服务器收到。 我在我的项目中有以下文件,都在同一级别的层次结构:
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"); 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;
requestHandlers.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;
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); } } exports.route = route;
最后一个是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);
当我input我的浏览器的URL“localhot:8888 /开始”例如,我得到这个在控制台:
Server has started. Request for /upload received About to route a request for/upload Request for /favicon.ico received About to route a request for/favicon.ico No request handler found for/favicon.ico
但为什么要我看到console.log我期望从upload()
或start()
函数?
谢谢!
这可能是因为你永远不会调用你的启动或上传function。 尝试在router.js中处理[pathname]之后添加一些括号,如下所示:
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;
希望这可以帮助。