我正在使用索引,服务器,路由器和requestHandler运行一个简单的nodejs应用程序,并且只要行response.writeHead(200,{“Content-Type”:“text / html”})就会显示错误;到达了。代码是:
文件requestHandler.js:
var querystring=require("querystring"),
fs=require("fs"),
formidable=require("formidable");
function start(response){
console.log("Request handler 'start' was called.");
var body='<html>'+
'<head>'+
'<meta http-equiv="Content-Type"'+
'content="text/html; charset=UTF-8"/>'+
'</head>'+
'<body>'+
'<form action="/upload" enctype="multipart/form-data"'+
'method="post">'+
'<input type="file" name="upload" mulitple="multiple">'+
'<input type="submit" value="Upload file"/>'+
'</form>'+
'</body>'+
'</html>';
response.writeHead(200,{"Content-Type":"text/html"});
response.write(body);
response.end();
}
文件index.js:
var server= require("./server");
var router= require("./router");
var requestHandlers= require("./requestHandlers");
var handle={}
handle["/"]=requestHandlers.start;
handle["/start"]=requestHandlers.start;
server.start(router.route, handle);
文件router.js:
function route(handle, pathname, request, response){
console.log("About to route request for "+pathname);
if (typeof handle[pathname] === 'function'){
handle[pathname](request, response);
}else{
console.log("No request handler found for" +pathname);
response.writeHead(404, {"Content-Type":"text/html"});
response.write("404 Not found");
response.end();
}
}
exports.route=route;
文件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);
route(handle,pathname,response,request);
}
http.createServer(onRequest).listen(8888);
console.log("Server has started");
}
exports.start=start;
答案 0 :(得分:1)
我想指出代码中的一些错误 -
未导出RequestHandlers函数start。因此,index.js不可能使用该函数。您需要先在requestHandlers.js文件中添加它
exports.start = start;
下一期是在router.js。如果满足if条件,则调用变量handle [pathname]指向的函数。但是你传递了两个参数 - 请求和响应。您不需要通过请求传递start函数,因为 - a)该函数不接受它作为参数和b)您不希望为请求收集任何内容。如果您确实需要从请求中获取一些信息(URL中传递的变量),您可以添加该参数以启动函数并适当地处理它。但是现在只需在调用handle [pathname]时删除该参数。所以,在router.js中编辑这一行 -
handle[pathname](response);
最后,server.js中的一个非常小的问题。您没有在第一次调用路由中传递正确数量的参数。所以删除路由(句柄,路径名)。其次,在第二次调用中,您交换了两个变量。您无法通过请求和响应执行此操作,因为node.js查找要输出的响应的变量响应,并且请求是针对对服务器发出的任何请求。您需要更正对server.js的调用
route(handle,pathname,request,response);
这应该为你解决。我希望这有帮助。如果还有什么我可以解释的,请告诉我。