我知道这可能是一个愚蠢的问题,但是我只是在敲打我的头脑,我无法自己解决这个问题,或者在老谷歌的帮助下解决问题。
我有一个快速4应用程序,其中在一个路由中执行脚本中的函数以列出数据目录中的所有可用json文件。
我的目录结构是:
/ - 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:
var tagRoutes = require("./routes/routes_tags.js")(app);
routes_tags.js需要tags_list.js:
var taglist = require('../modules/tags_list.js');
所以app.js需要routes_tags.js,而这又需要路由app.get(/ tags)中的tags_list.js。
app.get("/tags", function(req, res) {
在您的下方,我会看到我的代码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;
现在,输出是,虽然事实上没有输出,但我在目录rfidTagDir中有5个json文件。
顺便说一下,rfidTagDir在app.js中全局设置为:
app.set('rfidTagDir', 'data/rfidTagData');
有人能指出我,从专业的角度来看,我在这里做的可能是愚蠢的错误吗?我根本无法理解为什么它不起作用。
致以最诚挚的问候,
基督教
Ps。:你可能已经知道了这一点,我是node.js的新手,所以请原谅我相当不优雅的编码风格。
答案 0 :(得分:1)
OMG!
对不起,我发布这个问题的那一刻,我以为我会尝试最后一件事 - 这就是诀窍。
我从
更改了app.js中rfidTagDir的定义 app.set('rfidTagDir', 'data/rfidTagData');
到
app.set('rfidTagDir', './data/rfidTagData');
现在唯一剩下的就是没有正确创建json响应内容。但是我想我还是想继续努力,因为这种手工制作的json结构的编码非常糟糕。
尽管如此,我会确保下次,在发布之前,我会更彻底地解决我的问题。