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.”);


8 回复

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.");

解释

  1. 创建服务器http.createServer() 创建了一个新的 HTTP 服务器实例。
  2. 设置回调函数:在 createServer 中直接传入处理请求的回调函数。
  3. 监听端口server.listen(8888) 使服务器开始监听指定端口上的连接。
  4. 输出信息:最后,打印一条消息确认服务器已启动。

这样修改后,代码将正确运行,不会出现 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 方法。

回到顶部