2015-07-10 2 views
0

Я пытаюсь заблокировать определенные файлы на своем сайте от общедоступного доступа. Например, если вы перейдете на mysite.com/package.json вместо отображения его в браузере, я просто хочу отправить и отправить сообщение об ошибке или перенаправить обратно на мою домашнюю страницу или что-то еще. Я чувствую, что это должно быть легко ... но я не смог заставить что-нибудь работать. нет ничего сложного сайта, и он работает в довольно простой server.jsБлокирование доступа к статическому файлу в expressJS

var appRoot  = __dirname, 
    express  = require('express'), 
    chalk   = require('chalk'), 
    mongoose  = require('mongoose'), 
    bodyParser  = require('body-parser'), 
    methodOverride = require('method-override'), 
    path   = require('path'), 
    errorhandler = require('errorhandler'), 
    os    = require('os'), 
    http   = require('http'), 
    Routes; 


// ----------------------------- 
// Configuration 
// ----------------------------- 
var port, env, logs; 

// Switch some vars based on the ENV 
if(process.env.NODE_ENV === 'production'){ 
    port = 3000; 
    env = 'production'; 
} else { 
    port = 8080; 
    env = 'development'; 
} 

// Express Variables 
var app  = express(); 
var router = express.Router(); 

// Use static files in root 
app.use(express.static(__dirname)); 

// API config 
app.use(bodyParser.json()); 
app.use(methodOverride()); 
app.use(errorhandler({ dumpExceptions: true, showStack: true })); 

// Database 
mongoose.connect(mydb); 

// Routes/API Config 
Routes = require(appRoot + '/routes')(app, router, mongoose); 

// After all routes don't match ie. refreshing a page, send index.html 
app.get('/*', function(req, res) { 
    res.sendFile(__dirname + '/index-' + env + '.html'); 
}); 

app.listen(port); 

Я надеялся сделать что-то вроде:

app.get('/package.json', function(){ 
res.end('Not allowed'); 
}); 

или даже до того как я пошлю его статический html index проверить, пытаются ли они получить доступ к ограниченному файлу. Любые предложения, ресурсы и т. Д. Приветствуются. Если вам нужна дополнительная информация, просто спросите.

+0

Почему вы храните статические файлы в корне, а не какой-то 'общественного' каталог ? –

+0

У меня есть статические файлы (которые мой сайт должен получить) в/assets & in/views. Мне не нужно ничего доступного в моем корне –

ответ

1

Основываясь на вашем comment

Вы должны заменить эту строку:

app.use(express.static(__dirname)); 

с этим:

app.use('/assets', express.static(__dirname + '/assets')); 
app.use('/views', express.static(__dirname + '/views')); 
+0

ahhh nice, первый аргумент - это то, что мне нужно. Без него (которое я пробовал) просто вызвало дерьмо тонны ошибок –

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