2016-10-19 2 views
0

Я настроил узел так, чтобы он обслуживал мою общую папку. Теперь я пытаюсь получить доступ к файлам в структуре общих/данных/событий, но он не может его найти.Почему узел не может найти статический каталог?

Here is my file structure 
public/ 
     data/ 
      event/ 
src/ 
    scripts/eventController.js 
    webserver.js 

Этот файл моих событийController.js. Этот файл пытается получить доступ к файлам в структуре public/data/event/folder, но не может их найти.

'use strict'; 

let fs = require('fs'); 

module.exports.get = function(req, res) { 
    let event = fs.readFileSync('../public/data/event/' + 
    req.params.id + '.json', 'utf8'); 

    res.setHeader('Content-Type', 'application/json'); 
    res.send(event); 
}; 

module.exports.save = function(req, res) { 
    let event = req.body; 
    fs.writeFileSync('../public/data/event/' + req.params.id + 
    '.json', JSON.stringify(event)); 

    res.send(event); 
}; 

module.exports.getAll = function(req, res) { 
    let path = '../public/data/event/'; 

    let files = []; 
    try { 
     files = fs.readdirSync(path); 
    } catch (e) { 
     console.log(e); 
     res.send('[]'); 
     res.end(); 
    } 
    let results = '['; 
    for (let idx = 0; idx < files.length; idx++) { 
     if (files[idx].indexOf('.json') === files[idx].length - 5) { 
      results += fs.readFileSync(path + '/' + files[idx]) + ','; 
     } 
    } 
    results = results.substr(0, results.length - 1); 
    results += ']'; 

    res.setHeader('Content-Type', 'application/json'); 
    res.send(results); 
    res.end(); 
}; 

Это файл веб-сервер, где сервер общих папок

'use strict'; 

let express = require('express'); 

let port = process.env.PORT || 5000; 

let path = require('path'); 
let app = express(); 
let events = require('./scripts/eventsController'); 
let rootPath = path.normalize(__dirname + '/../'); 
let bodyParser = require('body-parser'); 

app.use(bodyParser.urlencoded({extended: true})); 
app.use(bodyParser.json()); 
app.use(express.static(rootPath + '/public')); 
app.use('/bower_components', express.static(__dirname + '/../public/lib/')); 
app.use("/public", express.static(path.join(__dirname, 'public'))); 

app.get('/data/event/:id', events.get); 
app.get('/data/event', events.getAll); 
app.post('/data/event/:id', events.save); 

app.get('*', function(req, res) { 
    res.sendFile(rootPath + '/public/index.html'); 
}); 

app.listen(port, function(err) { 
    if (err) { 
     console.log('There was an error creating the system'); 
    } 
    console.log('running server on port ' + port); 
}); 

Это ошибка, которую я получаю от терминала. enter image description here

+0

Немного оффтопный: как правило вы должны * всегда * дезинфицировать ввод пользователя до используя его для доступа к файлам на диске, выполняя запросы к базе данных (где это применимо) и т. д. – mscdex

ответ

1

Это связано с тем, что fs.readFile ('public/data/event /') из src/scripts/eventController.js ищет материал в 'src/scripts/public/data/event /', а не 'public/данные/событие». Вы должны пойти с fs.readFile ('../../ public/data/event'). Или еще лучше, всегда используйте абсолютные пути.

+0

Если они содержат скрипты/eventController.js в файле js в «src», то это будет fs.readFile ('../public/data/event ') –

+0

Как использовать абсолютный путь? Это не работает –

+0

существует 2 типа путей: первый тип - относительный путь. относительный путь, как следует из названия, путь к файлу или директории относительно того, откуда вы пришли. В вашем случае src/scripts/eventController.js. Если вы находитесь в/home, относительный путь разрешается в /home/src/scripts/eventController.js. Абсолютный путь, с другой стороны, не зависит от того, откуда вы пришли. Для окон «C: \ Users \ MyUser \ Desktop \ Project» является абсолютным путем. Аналогично для ubuntu/home/myuser/Desktop/myproject - это абсолютный путь. Поскольку независимо от того, где вы находитесь, он всегда направляет одно и то же место. – ardilgulez

0

public папка - родной брат src папка. Вам нужен абсолютный путь (например, начало от root, например/home/username/proj/node/public /) или правильный относительный путь, то есть ../public

+0

Как использовать абсолютный путь? Я редактировал вопрос, чтобы показать скриншот с новым относительным путем –

+0

@FernandoAnia добавил пример – mtk

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