PostgreSQL coub express.js freeware git jquery laravel links linux macos mysql node.js php python ubuntu vim virtualbox анекдот блог игры интересно музыка стихи цитаты

В Api.Reference есть пример который показывает как разрешить листать все директории внутри public.
app.use(express.directory('public'))
app.use(express.static('public'))
Чтобы лучше понять как это работает можно посмотреть исходник
node_modules/express/node_modules/connect/lib/middleware/directory.js
Возникает вопрос, как быть если я не хочу разрешать листать весь public, а только конкретные папки? Решение может быть таким
// обычный static для public
app.use(express.static(path.join(__dirname, 'public')));
// маунтим роут на папку которую будет обслуживать directory 
// + передаем опции отображения
app.use('/files-list', express.static(path.join(__dirname, 'public', 'files')));
app.use('/files-list', express.directory(path.join(__dirname, 'public', 'files'), {hidden: true, icons: true}));
Или в случае если имя папки на диске совпадает с роутом (тоже самое, только с реальным именем папки для правильных ссылок для загрузки файлов)
app.use('/files', express.directory(path.join(__dirname, 'public', 'files'), {icons: true}));


Наверное не нужно объяснять зачем это нужно.

test1.js
exports.test1 = function(req, res){
  res.render('test1', { title: 'test1' }, function(err, body) {
    console.log(body);
  });

  res.send('wooo');
};

test1.jade
div
  = title
p hello world!


Маленькие "хитрости" bash. На примере перезапуска приложения node.js
#!/bin/bash
# чтобы было легче жить, добавим все нужные пути в переменные
DAEMON="/usr/local/bin/node"
ROOT_DIR="/home/user/project-copy-folder"
# тут на основании базовых путей выставляем пути к файлам PID, 
# логов и скрипта, запускающего само приложение
PIDFILE="$ROOT_DIR/pidfile"
SERVER="$ROOT_DIR/app.js"
LOG_FILE="$ROOT_DIR/app.js.log"

# останавливаемся, обратите внимание на то, как получается и обрабатывается PID
echo -n "Stopping $SERVER: "
kill -9 $(cat $PIDFILE) && echo 'ok stoped' || echo 'error on stop my-funny app'

# чистим логи и убираем старый PID (это опционально)
>$LOG_FILE
>$PIDFILE

# стартуем. тут самое как мне кажется, непонятное — это конструкция echo $! > $PIDFILE
# здесь $! это PID последнего запущенного приложения (читаем ман по bash), с пониманием
# этого нюанса становится понятно все остальное
echo -n "Starting $SERVER: "
`$DAEMON $SERVER > $LOG_FILE & echo $! > $PIDFILE &` && echo 'ok, started' || echo 'error on start my-funny app'
Интересная особенность как мне показалось состоит в том, что если мы выполним например вот такой код
/usr/local/bin/node /home/user_name/project/app.js &
echo $!
То увидим напечатанный PID. А вот если исполнить тоже самое, но через eval
NODE='/usr/local/bin/node'
APP='/home/user_name/project/app.js'
`$NODE $APP &`
echo $!
То не увидим ничего. То есть eval где-то у себя это значение закусывает и нам оно нормально не доезжает. Соответственно решением (скорее всего одним из решений, так как я никакой не специалист по bash), будет получение PID-а прямо внутри этого самого eval-a как показано в первом примере.

Из переменной (правильно называть это переменными??) $$ - можно получить PID текущего скрипта, то есть если вы планируете в нем зависнуть то имеет смысл положить куда-то PID-файл чтобы потом что-то с этим процессом делать. Баш вообще интересная штука, жаль почти не остается времени на глубокие раскопки в этих шаманствах.


aghr