我的路径模块有这个问题。当我尝试在请求处理程序中使用“path.join ...”时,我收到错误消息
TypeError:无法读取未定义
的属性“join”
但是,我可以通过在requestHandler的主体内加载模块来修复它(我在代码中注释掉了它)。
你能解释一下它失败的原因以及为什么“修复”有效以及最常用的处理方式是什么?
var http = require('http');
var url = require('url');
var path = require('path');
var fs = require('fs');
var port = 3000;
var requestHandler = (request, response) => {
//path = require('path');
var uri = url.parse(request.url).pathname;
var filename = path.join(process.cwd(), uri);
var path = process.cwd();
var buffer = fs.readFileSync(path + "/someSite.html");
response.end(buffer);
};
var server = http.createServer(requestHandler);
server.listen(port, (err) => {
if (err) {
return console.log('sum ting wong', err);
}
console.log('server is listening on ${port}');
});
答案 0 :(得分:5)
它已被破坏,因为您在path
的请求处理程序中重新分配给var path = process.cwd()
。
var声明为hoisted,这意味着您的实现等同于:
var requestHandler = (request, response) => {
var path; // hoisted!
var uri = url.parse(request.url).pathname;
var filename = path.join(process.cwd(), uri);
path = process.cwd();
// ...
};