2017-10-19 3 views
1

나는 이것이 아마도 어리석은 질문에 가깝다는 것을 알고있다. 그러나 나는 머리를 치고 있는데, 나는 혼자서 또는 문제를 해결할 수 없다. 좋은 옛날 구글의 도움.node.js fs.readdir는 디렉토리에 어떤 파일도 보여주지 않는다.

나는 한 경로에서 스크립트의 함수가 실행되어 데이터 디렉토리에서 사용 가능한 모든 json 파일을 나열하는 express 4 응용 프로그램이 있습니다.

내 디렉토리 구조는 이것이다 :

var taglist = require('../modules/tags_list.js'); 

그래서 응용 프로그램 : tags_list.js을 필요로

var tagRoutes = require("./routes/routes_tags.js")(app); 

routes_tags.js :

/     - app root directory with app.js 
/routes   - routes_tags.js is stored here 
/modules   - tags_list.js is stored here 
/data/rfidTagData - directory that holds json files 

app.js는 routes_tags.js이 필요합니다. js에는 routes_tags.js가 필요하며 app.get (/ tags) 경로에는 tags_list.js가 필요합니다. 당신이 tags_list.js 이제

var path = require('path'); 
var fs = require('fs'); 

//var taglist = function(tagDirectory, serverAddr, debug){ 
var taglist = function(app){ 
    // get global app variables 
    var DEBUG = app.get('DEBUG'); 
    var svrAddr = app.get('svrAddr'); 
    var rfidTagDir = path.join('/', app.get('rfidTagDir')); 
    var responseContent = ''; 

    if (DEBUG) { 
    console.log('list of tags requested - provided data: '); 
    console.log('directory: ' + rfidTagDir); 
    } 
    try { 
    fs.readdir(rfidTagDir, function(err, items) { 
     console.log(items); 
     if (!items.length) { 
     // directory appears to be empty 
     console.error("nothing to read in directory "+rfidTagDir); 
     responseContent = '{\'response\': \'warning\', \'message\': \'nothing to read from directory '+rfidTagDir+'\'}'; 
     } else { 
     if (app.DEBUG) console.log(items); 
     responseContent = "{\'response\': \'info\', \'description\': \'list of all stored rfid tags\', \'tags\': [" 

     for (i in items) { 
      var tag = items[i].toString().substring(0,items[i].indexOf('.')); 
      responseContent += "{\'tag\': \'" + tag + "\', \'endpoint\': \'"+svrAddr+"/tags/tag/" + tag + "\', \'file\': \'"+items[i]+"\'}" 
      // we only need to add the , after an array element in the json 
      // structure, if there are sukzessive elements. 
      if (i<items.length-1) responseContent += ","; 
     } 
     responseContent += "]}" 
     } 
    }); 
    } catch (err) { 
    console.error("could not read directory "+rfidTagDir+" to list available tags \nException output: " + err.toString()); 
    responseContent = '{\'response\': \'error\', \'message\': \'could not read directory '+rfidTagDir+'\', \'exception\': \' '+err.toString()+'\'}' ; 
    } 

    if (DEBUG) {console.log(responseContent)} 
    return responseContent; 
} 
module.exports = taglist; 

의 내 코드를 볼 수 있습니다 아래

app.get("/tags", function(req, res) { 

, 출력은 사실이기는하지만 어떠한 출력 내가 디렉토리에 5 JSON-파일이 있는지,이 없다는 것을,이다 rfidTagDir.

app.set('rfidTagDir', 'data/rfidTagData'); 

누군가는 전문 관점, 내가 여기에 한 아마 바보 같은 오류를 내 날 지점 수 : 그런데

rfidTagDir는 app.js 세계적으로 설정되어 있습니까? 나는 그것이 왜 효과가 없어야하는지 알 수 없다.

감사합니다, 나는 나의 오히려 우아 코딩 스타일을 실례 Node.js를 오히려 새로 온 사람에 의해

기독교

이시는 : 당신은 아마 이미 이것을 알고있다.

+0

'var taglist = require ('../ modules/tags_list.js ');를 사용하여'taglist'를 가져 와서'taglist (app)'를 호출합니까? – skirtle

답변

1

OMG!

죄송합니다. 질문을 게시 한 순간에 마지막으로 한 가지만 시도해 보았습니다. 그게 속임수였습니다.

내가 지금 남아있는 유일한 것은, JSON 응답 내용이 제대로 만들어되지 않는 것입니다

app.set('rfidTagDir', './data/rfidTagData'); 

app.set('rfidTagDir', 'data/rfidTagData'); 

에서 app.js에 rfidTagDir의 정의를 변경했습니다. 그러나 나는 어쨌든 그 작업을 원할 것입니다. 왜냐하면이 손으로 만들어진 json 구조로 코딩하는 것이 좋지 않기 때문입니다.

그럼에도 다음 번에는 게시하기 전에 문제를 더욱 철저히 해결해 보겠습니다.

관련 문제