NodeJs问题求助

NodeJs问题求助

var handle = {};

handle["/"] = requestHandlers.start; handle["/upload"] = requestHandlers.upload; handle["/start"] = requestHandlers.start;

console.log("===handle==="+handle["/upload"]); 用这个怎么打印出来的是undefined?? 我是新手昨天刚学,希望大家指点下!!

6 回复

当然可以!根据你提供的代码片段,看起来你在尝试创建一个路由处理器对象,并且希望打印出某个特定的处理器。然而,你在代码中存在一些重复和潜在的错误。让我们一步一步来解决这个问题。

首先,我们来看一下你的代码:

var handle = {};

handle["/"] = requestHandlers.start;
handle["/upload"] = requestHandlers.upload;
handle["/start"] = requestHandlers.start;

从这段代码可以看出,handle["/start"] 被设置为 requestHandlers.start,而不是 requestHandlers.upload。这可能是导致你看到 undefined 的原因。

为了更好地理解并解决问题,我们需要确保 requestHandlers 对象中确实存在这些方法。假设 requestHandlers 是一个对象,其中包含了一些处理函数,例如 startupload

以下是一个完整的示例代码,以帮助你理解如何正确地设置和使用路由处理器:

// 假设这是你的 requestHandlers 对象
const requestHandlers = {
    start: function(request, response) {
        response.writeHead(200, {"Content-Type": "text/plain"});
        response.write("This is the start handler");
        response.end();
    },
    upload: function(request, response) {
        response.writeHead(200, {"Content-Type": "text/plain"});
        response.write("This is the upload handler");
        response.end();
    }
};

// 创建路由处理器对象
var handle = {};

// 设置路由处理器
handle["/"] = requestHandlers.start;
handle["/upload"] = requestHandlers.upload;
handle["/start"] = requestHandlers.start;

// 打印出特定的处理器
console.log("===handle===", handle["/upload"]);

在这个示例中:

  1. 我们定义了一个 requestHandlers 对象,其中包含两个处理函数 startupload
  2. 我们创建了一个 handle 对象,并正确地设置了每个路径对应的处理函数。
  3. 最后,我们打印出 handle["/upload"] 来验证它是否被正确设置。

如果你仍然看到 undefined,请检查 requestHandlers 对象是否正确加载或是否存在拼写错误。

希望这能帮助你解决问题!如果有任何其他疑问,请随时提问。


这个, 楼主描述详细一些吧, 或者是放别人能用命令本地测试的代码, 太短了理解不了的, 比如说这里的 requestHandlers 是什么要有个来头对吧 贴代码的时候记得开头结尾用三个反引号 ``` 的行标记一下~

问一下,怎么放别人能用本地命令测试的代码?? 下面是我用到的几个js文件: 1.index.js // index.js

var server = require("…/server/server");

var router = require("…/route/route");

var requestHandlers = ("…/requestHandlers");

var handle = {};

handle["/"] = requestHandlers.start; handle["/upload"] = requestHandlers.upload; handle["/start"] = requestHandlers.start;

var userObject = {}; // equivalent to new Object()

userObject[“lastLoginTime”] = new Date(); userObject["/upload"] = requestHandlers.upload;

//alert(userObject[“lastLoginTime”]);

console.log("===handle==="+userObject["/upload"]); console.log("===handle==="+handle["/upload"]);

server.start(router.route,handle);

2.server.js

// start.js

var http = require(‘http’); var url = require(“url”);

function start(route, handle){ function onRequest(request,response){ var parthname = url.parse(request.url).pathname; console.log('Request For ‘+ parthname + ’ received’);

	route(handle, parthname);
response.writeHead(200,{"Content-Type":"text/plain"});
response.write("Hello World !");
response.end();

}

http.createServer(onRequest).listen(8888); console.log(“Server Has Started PORT:8888.”);

}

exports.start = start;

3.route.js // route.js

function route(handle, pathname){ console.log('About To Route a Rrequest for '+pathname); console.log("-------test----------"+ handle[pathname]); if(typeof handle[pathname] === ‘function’){ handlepathname; } else { console.log("No rquest handler found for "+ pathname); } }

exports.route = route; 4.// 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;

问题已解决,谢谢大家的关注!!strong text

module.exports.start = start; module.exports.upload = upload;

根据你的描述,handle["/upload"] 打印出来是 undefined 的原因可能是因为 requestHandlers.upload 没有被正确地定义或引用。让我们通过一个简单的例子来解释这个问题。

假设你有一个 requestHandlers.js 文件,内容如下:

// requestHandlers.js
exports.start = function(request, response) {
    response.writeHead(200, {"Content-Type": "text/plain"});
    response.write("This is start page");
    response.end();
};

exports.upload = function(request, response) {
    response.writeHead(200, {"Content-Type": "text/plain"});
    response.write("This is upload page");
    response.end();
};

然后,在你的主文件(例如 server.js)中,你需要正确地导入这些处理函数,并确保它们被正确引用。

// server.js
const http = require('http');
const url = require('url');
const path = require('path');
const fs = require('fs');

const requestHandlers = require('./requestHandlers'); // 正确引入 requestHandlers

var handle = {};
handle["/"] = requestHandlers.start;
handle["/upload"] = requestHandlers.upload;
handle["/start"] = requestHandlers.start;

console.log("===handle===", handle["/upload"]);

如果 handle["/upload"] 仍然显示为 undefined,那么可能的原因是 requestHandlers.upload 没有被正确地导出或加载。请确保 requestHandlers.js 文件中的导出部分没有拼写错误或其他语法错误。

另外,你可以尝试打印 requestHandlers 对象来检查其内容,以确认 upload 处理程序是否被正确加载:

console.log("===requestHandlers===", requestHandlers);

这样可以帮助你诊断问题所在。希望这能帮助你解决问题!

回到顶部