Express route вызывает команду оболочки дважды, почему? - PullRequest
0 голосов
/ 18 июня 2020

Я делаю приложение, которое создает демонстрации других моих приложений. Человек видит модальное окно, вводит поддомен и информацию об учетной записи администратора, и в идеале он создаст приложение через git clone и разместит его. Он работает, но когда я запускаю приложение через node app.js, он показывает мне вывод функции router.post, и, по всей видимости, команда вызывается дважды. Мой код выглядит следующим образом:

const express = require('express');
const router = express.Router();

const App = require('../models/App');
const {execSync} = require('child_process');
const fs = require('fs');

router.post('/install-livechats', async (req, res) => {
    const {subdomain, title, email, name, password} = req.body;

    const existingApp = await App.findOne({subdomain: subdomain.toLowerCase()});
    if (existingApp) {
        return res.status(500).send({
            message: 'Subdomain already exists'
        })
    }

    const serverContent = `
server {
    server_name ${subdomain}.mikolaj.dk;
    root /var/www/${subdomain}_app/public/;
    index index.php index.html index.htm;

    location / {
         try_files $uri $uri/ /index.php$is_args$args;
    }

    # pass the PHP scripts to FastCGI server listening on /var/run/php7.2-fpm.sock
    location ~ \\.php$ {
            try_files $uri /index.php =404;
            fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
    }
}
`
    fs.writeFileSync(subdomain, serverContent);
    execSync(`mv ${subdomain} /etc/nginx/sites-enabled/${subdomain}`);
    execSync(`service nginx restart`);

    console.log('NGINX Configuration File written successfully.');
    execSync(`cd /var/www && git clone https://github.com/miko1991/livechats.git ${subdomain}_app`);
    console.log('Cloned successfully');
    execSync(`cp /var/www/${subdomain}_app/.env.example /var/www/${subdomain}_app/.env`);
    execSync(`chown -R www-data.www-data /var/www/${subdomain}_app`);
    console.log('Changed permissions successfully');
    execSync(`cd /var/www/${subdomain}_app && composer install -q`);
    const dbName = subdomain.replace('-', '_');
    execSync(`echo "create database ${dbName}_app" | mysql`);
    execSync(`php /var/www/${subdomain}_app/artisan key:generate`);
    execSync(`echo "DB_DATABASE=${dbName}_app" >> /var/www/${subdomain}_app/.env`);
    execSync(`echo "DB_USERNAME=admin" >> /var/www/${subdomain}_app/.env`);
    execSync(`echo "DB_PASSWORD=Admin123" >> /var/www/${subdomain}_app/.env`);
    execSync(`echo "PUSHER_APP_ID=714182" >> /var/www/${subdomain}_app/.env`);
    execSync(`echo "PUSHER_APP_KEY=93f1dbf6b4e7717cc933" >> /var/www/${subdomain}_app/.env`);
    execSync(`echo "PUSHER_APP_SECRET=3d41c19442920dcf50b5" >> /var/www/${subdomain}_app/.env`);
    execSync(`echo "BROADCAST_DRIVER=pusher" >> /var/www/${subdomain}_app/.env`);
    execSync(`php /var/www/${subdomain}_app/artisan migrate`);
    execSync(`php /var/www/${subdomain}_app/artisan admin:add "${name}" "${email}" "${password}"`);
    console.log('App installed successfully');

    res.sendStatus(201);
})

module.exports = router;


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...