Отображение страницы загрузки, пока я не получу ответ от сервера - PullRequest
2 голосов
/ 08 марта 2020

Я запускаю сценарий python на своем сервере для данных, которые я передал ему с помощью формы. Сценарий занимает 6-8 сек c времени выполнения, и после запуска скрипта я отображаю другую страницу. Я хочу, чтобы страница загрузки отображалась во время выполнения сценария на бэкэнде.

Мой код:

    var express = require("express"),
        router = express.Router();
    var Place = require("../models/place"),
        Comment = require("../models/comment");
    var middleware = require("../middleware"),
        multer = require("multer"),
        path =  require("path"),
        {spawn} = require("child_process"),
        fs = require("fs");


    function runScript(pathToImage){
        return spawn('python', [
          "-u", 
          path.join(__dirname + "/../", 'script.py'),
          pathToImage, 
        ]);
    }

    //CREATE Route

    //route to get the form
    router.get("/new", middleware.isLoggedIn, function(req, res){
        res.render("places/new");
    });
    //post route
    router.post("/", middleware.isLoggedIn, uploadDir.single("image"), function(req, res){
        var name = req.body.name;
        var imgurl = "/uploads/images/" + req.file.filename;
        var description = req.body.description;
        var author = {
            id: req.user._id,
            username: req.user.username
        };
        let garbageVal;


        //running my python script

        const subprocess = runScript("uploads/images/" + req.file.filename);
        // print output of script
        subprocess.stdout.on('data', (data) => {
            garbageVal = data.toString();
        });
        subprocess.on('close', () => {
            if(garbageVal === "Garbage found\n"){
                var newPlace = {name:name, image:imgurl, description:description, author:author, garbageVal:garbageVal};
                //Create a new place and save to DB
                Place.create(newPlace, function(err, newlyCreated){
                    if(err){
                        console.log("DB inserting error");
                    }
                    else{
                        res.redirect("/places");
                    }
                });
            }
            else{
                req.flash("error", "No garbage found in the uploaded image.");
                fs.unlink("uploads/images/" + req.file.filename, (err) => {
                    if (err){
                        console.log(err);
                        return res.redirect("back");
                    }
                    console.log("Image deleted from server");
                    res.redirect("/places");
                });
            }         
        });       
    });

Я попытался добавить загрузчик div и установить для его свойства display значение none. когда мое тело загружается на страницу, но это не имеет никакого эффекта, так как при запуске моего сценария python сервер не отвечает.

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