Nodejs Hello world 这样写 为什么会报object is not a function错????
Nodejs Hello world 这样写 为什么会报object is not a function错????
var http =require(“http”);
var server=http.createServer();
function onRequestCallBack(request,response) { console.log(“Request Received.”); response.writeHead(200,{“Content-type”: “text/plain”}); response.write(“Hello JasonW”); response.end(); }
server(onRequestCallBack).listen(8888);
console.log(“Server has started.”);
Node.js Hello World 示例与错误解析
原始代码
var http = require("http");
var server = http.createServer();
function onRequestCallback(request, response) {
console.log("Request Received.");
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Hello JasonW");
response.end();
}
server(onRequestCallback).listen(8888);
console.log("Server has started.");
错误分析
在这段代码中,你遇到了一个 TypeError: object is not a function
的错误。这个错误通常是因为尝试调用一个不是函数的对象。
问题所在
在你的代码中,server
是通过 http.createServer()
创建的一个对象。然后你试图将 onRequestCallback
函数作为参数传递给 server
对象并调用它(即 server(onRequestCallback)
),这是不正确的。
正确的做法应该是使用 .on('request', callback)
方法来注册请求处理函数,或者直接在创建服务器时传递该回调函数。
正确的代码示例
以下是修正后的代码:
var http = require("http");
// 直接在 createServer 中传入回调函数
var server = http.createServer(function(request, response) {
console.log("Request Received.");
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Hello JasonW");
response.end();
});
// 将服务器绑定到端口 8888
server.listen(8888);
console.log("Server has started.");
解释
- 创建服务器:
http.createServer()
创建了一个新的 HTTP 服务器实例。 - 设置回调函数:在
createServer
中直接传入处理请求的回调函数。 - 监听端口:
server.listen(8888)
使服务器开始监听指定端口上的连接。 - 输出信息:最后,打印一条消息确认服务器已启动。
这样修改后,代码将正确运行,不会出现 object is not a function
的错误。
server(onRequestCallBack).listen(8888); 这一行明显不对吧。callback要么在createServer的时候传递,要么用server.on(‘request’, onRequestCallBack)…
这样吗? 也不对哦!
var http =require(“http”); var server=http.createServer();
function onRequestCallBack(request,response) { console.log(“Request Received.”); response.writeHead(200,{“Content-type”: “text/plain”}); response.write(“Hello JasonW”); response.end; };
server.on(‘request’,onRequestCallBack).listen(8888);
console.log(“Server has started.”);
之前是个问题,这样改了以后不是可以跑了么,end要加括号end()。先找本基本的书,照上面的例子抄一抄吧。
楼主看的是什么书?监听的也是8888 话说,你是不是想写成这样 function start(route, handle) { function onCreate(request, response) { var postData = “”; var pathname = url.parse(request.url).pathname; console.log(“Request for " + pathname + " received.”);
request.setEncoding("UTF-8");
request.addListener("data", function(postDataChunk) {
postData += postDataChunk;
console.log("Received POST data chunk '"+ postDataChunk + "'.");
});
request.addListener("end", function() {
route(handle, pathname, response, postData);
});
}
http.createServer(onCreate).listen(8888);
console.log(“Server has started”);
} exports.start = start; 这是写的例题server的一部分
的确是抄错了,谢谢,下次我一定细心点。
恩恩,共同学习进步
从你提供的代码来看,问题出在 server(onRequestCallBack)
这一行。http.createServer()
返回的是一个对象,并且它本身并不是一个函数,因此不能直接通过 server(onRequestCallBack)
的方式调用。
正确的做法是将 onRequestCallBack
作为参数传递给 createServer
方法。你可以修改你的代码如下:
var http = require("http");
// 创建服务器时,需要将 onRequestCallBack 作为参数传递给 createServer 方法
var server = http.createServer(onRequestCallBack);
function onRequestCallBack(request, response) {
console.log("Request Received.");
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Hello JasonW");
response.end();
}
server.listen(8888); // 调用 listen 方法启动服务器
console.log("Server has started.");
在这个修正后的版本中,我们直接将 onRequestCallBack
函数传递给 createServer
方法,这样当有请求到达时,Node.js 将会调用 onRequestCallBack
函数来处理该请求。同时,listen
方法用于启动服务器并监听指定端口上的连接。
简而言之,错误的原因是你试图通过 server(onRequestCallBack)
的方式调用一个对象(server
),而不是将其作为参数传递给 createServer
方法。正确的做法是将回调函数直接传递给 createServer
方法。