Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.03.2018, 22:45   #1
dfcz112
Новичок
Джуниор
 
Регистрация: 26.03.2018
Сообщений: 1
По умолчанию Падает скрипт. Почему?

Есть такой серверный скриптик. Но по запросу на /file всё падает, методом бесконечных проб и мучительных ошибок я добился ничего. Только понял, что файлик после uploadFile не успевает создаться, а следующая функция открывает его уже как поток, поэтому всё и падает. Что здесь делать?
Код:
var fs = require('fs'),
  http = require('http'),
  url = require('url'),
  multiparty = require('multiparty'),
  request = require('request');

var server = new http.Server();

//получить локальный ip на который нужно подключаться
var ifs = require('os').networkInterfaces();
var result = Object.keys(ifs)
  .map(x => [x, ifs[x].filter(x => x.family === 'IPv4')[0]])
  .filter(x => x[1])
  .map(x => x[1].address)[2]; // [2] - номер в списке
console.log('\nUse this ip: ' + result);
console.log("Successfully started\n");

server.listen('80', result);
server.on('request', onRequest);

async function onRequest(req, res) {
  var parsed = url.parse(req.url, true);
  switch (parsed.pathname) {
    case '/':
    case '/index.html':
      fs.readFile('index.html', function(err, file) {
        if (err) res.end();
        res.end(file);
      });
      break;
    case '/file':
    uploadFile(req)
    .then(function(){
      return changeImage({
          'uploadfile': fs.createReadStream('./files/temp.jpg'),
          'ef-set': 10,
          'ef-set-2': 10,
          'jpeg-quality': 80
        }, 'https://www.imgonline.com.ua/grid-square-result.php',
        'http://www.imgonline.com.ua/',
        new RegExp(/download\.php\?file=.+?\.jpg/))
    })
    .then(function(link){
      loadFile(link);
    })
    .then(function(){
      return changeImage({
          'uploadfile': fs.createReadStream('./files/temp.jpg'),
          'efset1': 2,
          'outformat': 2,
          'jpegtype': 1,
          'jpegqual': 85,
          'jpegmeta': 1
        },
        'https://www.imgonline.com.ua/add-effect-black-white-result.php', '',
        new RegExp(/https:\/\/.+?\.jpg/)
      );
    })
    .then(function(link){
      loadLink(link);
    })
    .then(function(){
      res.end('files/temp.jpg');
    })
    .catch(function(err){
      console.log('ERR ', err);
    });

      break;
    default:
      fs.readFile('./' + req.url, function(err, file) {
        if (err) res.end();
        res.end(file);
      });
  }
}

function uploadFile(req) {
return new Promise(function(resolve, reject){
  if (fs.exists('./files/temp.jpg')) {
      fs.unlink('./files/temp.jpg', function() {});
    }
    var form = new multiparty.Form();
    form.parse(req, function(err, fields, files) {

      var path = files.uploadfile[0].path;

      fs.copyFile(path, './files/temp.jpg', function(){
        fs.unlink(path, function(){
            resolve();
        });
      });
    });
});

}

async function changeImage(formData, url, link, regExp) {
  return new Promise(function(resolve, reject) {
    //великий костыль
    var timer = setInterval(function() {
      if (fs.existsSync('./files/temp.jpg')) {
        clearInterval(timer);
        f(resolve, reject);
        console.log('LALA');
        formData.uploadfile = fs.createReadStream('./files/temp.jpg');
      }
    }, 10);

    function f(resolve, reject) {
      request.post({
        url: url,
        formData: formData
      }, function(err, resp, body) {
        if (err) console.log('ERR: ', err);
        link += body.match(regExp);
        if (link.length > 32) {
          resolve(link);
        } else {
          console.log('ERROR! LINK WAS NOT FOUND');
          reject();
        }
      });
    }
  });
}

function loadFile(link) {
  request
    .get(link)
    .on('response', function(response) {
      response.pipe(fs.createWriteStream('./files/temp.jpg'));
    });
}
_____
К сожалению на форуме нет тега [JS], поэтому используйте для форматирования кода теги [CODE] (читать FAQ)
Модератор

Последний раз редактировалось Serge_Bliznykov; 27.03.2018 в 09:29.
dfcz112 вне форума Ответить с цитированием
Старый 12.04.2018, 08:25   #2
Stanislav
Квадрокоптерист
Участник клуба Подтвердите свой е-майл
 
Регистрация: 29.09.2007
Сообщений: 1,824
По умолчанию

Цитата:
Но по запросу на /file всё падает
когда это все падает, из консоли можно ошибку скопировать? или тот кто будет Вам помогать должен ваш скрипт запустить, а читать Ваш скопированный не пойми откуда код не очень хочется. потому всегда пишите ошибки.


Когда что то не работает и Вы не можете понять в чем дело, вернитесь в начало, и попробуйте начать с минимального, т.е попробуйте просто загрузить файл чтобы он не падал. у меня где то были скрипты для загрузки но искать и выдирать я не хочу, потому ссылок накидаю.

1. https://github.com/kunalnagar/nodejs-basic-file-upload
2. https://github.com/domharrington/fileupload
3. https://gist.github.com/xjamundx/1631025
4. https://www.ibm.com/developerworks/c...Multer?lang=ru
5. https://www.w3schools.com/nodejs/nodejs_uploadfiles.asp

Ну и сами поискайте. когда научитесь загружать файлы без ошибок, продолжите писать свой скрипт дальше
Я часть той силы, что вечно хочет зла, но вечно совершает благо..

Последний раз редактировалось Stanislav; 12.04.2018 в 08:30.
Stanislav вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему при вызове функции 4ch прерывания 21h резидентный обработчик падает? bobah_wb Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 02.05.2016 20:41
почему если во время брута отображать подставляемые пароли, падает производительстность, относительно работы без отображения? komra2 Операционные системы общие вопросы 25 01.05.2016 20:26
Почему С++ падает Sylar9 Общие вопросы C/C++ 5 27.03.2012 01:50
Почему не работает скрипт ser70 JavaScript, Ajax 11 03.10.2010 17:09