2014-04-26 3 views
1

Это мой код:Lstat: Ошибка типа: путь должен быть строкой.


var http = require('http'); 
var port = process.env.port || 1337; 
var fs = require('fs'); 
var url = require('url'); 

var current_data_store = __dirname.replace(/\\/g,"/")+"/DATA"; 

http.createServer(function (req, res) { 
    res.writeHead(200, { 'Content-Type': 'text/plain' }); 

    this.requiredPath = current_data_store+""+url.format(req.url); 
    console.log(this.requiredPath); 
    fs.exists(this.requiredPath, function (exists) { 
     if(exists){ 
      if(fs.lstatSync(this.requiredPath).isDirectory()){ 
       console.log("It's dir"); 
       //render list of files 
      } else if(fs.lstatSync(this.requiredPath).isFile()){ 
       console.log("It's file"); 
       //render file 
      } 
     } else { 
      console.log("doesnt exist"); 
     } 
    }); 

    res.end('Hello World\n'+req.url+''); 
}).listen(port); 

Я хочу сделать простой файловый менеджер. Скрипт будет показывать файлы с пути, набранного в адресной строке (но только файлы, находящиеся в файле DATA).

Проблема заключается в том: обратный узел ошибки:

fs.js:679 return binding.lstat(pathModule._makeLong(path)); ^ TypeError: path must be a string at Object.fs.lstatSync (fs.js:679:18) at C:\Users\piotr_000\Source\Repos\Cloud\Cloud\server.js:15:19 at Object.cb [as oncomplete] (fs.js:168:19)

Я действительно не знаю, почему она появляется. Функция fs.exists() работает правильно и не жалуется, что путь не является строкой.

ответ

0

Вы используете this в своем обратном вызове fs.exists(), который не совпадает с this в родительском пространстве. Попробуйте это вместо:

this.requiredPath = current_data_store+""+url.format(req.url); 
console.log(this.requiredPath); 
var self = this; 
fs.exists(this.requiredPath, function (exists) { 
    if(exists){ 
     if(fs.lstatSync(self.requiredPath).isDirectory()){ 
      console.log("It's dir"); 
      //render list of files 
     } else if(fs.lstatSync(self.requiredPath).isFile()){ 
      console.log("It's file"); 
      //render file 
     } 
    } else { 
     console.log("doesnt exist"); 
    } 
}); 
+0

спасибо. Как всегда: глупая ошибка :) – Piotrek

Смежные вопросы