Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 25.03.2018, 22:55
Интересующийся
Отправить личное сообщение для dfcz112 Посмотреть профиль Найти все сообщения от dfcz112
 
Регистрация: 30.01.2018
Сообщений: 29

await uploadFile(req);
      var l = await 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/));
      await loadFile(l);
      l = await 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/g)
      );
      await loadFile(l);

      res.end('files/temp.jpg')

Там вот должно идти. changeImage и loadFile 2 раза вызываются с разными параметрами.
Все поправил, как ты сказал. Только всё равно падает. Выясняю почему...
Ответить с цитированием
  #12 (permalink)  
Старый 26.03.2018, 00:00
Интересующийся
Отправить личное сообщение для dfcz112 Посмотреть профиль Найти все сообщения от dfcz112
 
Регистрация: 30.01.2018
Сообщений: 29

Теперь простыня выглядит вот так. НО ВСЁ РАВНО падает. Бесит уже
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':
      await uploadFile(req);
      var l = await 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/));
      await loadFile(l);
      // l = await 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/)
      // );
      // await loadFile(l);

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

function uploadFile(req) {
  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(err) {
        if (err) console.log(err);
        return;
      });
    });
  });

}

function changeImage(formData, url, link, regExp) {
  return new Promise(function(resolve, reject) {
    request.post({
        url: url,
        formData: formData
      },
      function(err, resp, body) {
        if (err) {
          console.log('ERR: ', err);
        }
    
        link += body.match(regExp);
        resolve(link);
      });
  })
}

function loadFile(link) {
  return new Promise(function(resolve, reject) {
    request
      .get(link)
      .on('response', function(response) {})
      .pipe(fs.createWriteStream('./files/temp.jpg'))
      .on('finish', function() {
        resolve();
      });
  })

}
Ответить с цитированием
  #13 (permalink)  
Старый 26.03.2018, 13:36
Интересующийся
Отправить личное сообщение для dfcz112 Посмотреть профиль Найти все сообщения от dfcz112
 
Регистрация: 30.01.2018
Сообщений: 29

Функция uploadFile работает как-то с ошибками, потому что если закоментить её в потоке выполнения, то ошибки выпадают другие. Это раз.
Теперь changeImage почему - то не работает. То в тихую падает, то еще чего. А по телу страницы body из нёё видно, что она не может передать загружаемый файл куда надо, потому что на странице ошибка получения файла
Ответить с цитированием
  #14 (permalink)  
Старый 26.03.2018, 14:41
Интересующийся
Отправить личное сообщение для dfcz112 Посмотреть профиль Найти все сообщения от dfcz112
 
Регистрация: 30.01.2018
Сообщений: 29

функция loadFile тоже работает через задницу. Ничего толком скачать не может
Ответить с цитированием
  #15 (permalink)  
Старый 26.03.2018, 15:16
Интересующийся
Отправить личное сообщение для dfcz112 Посмотреть профиль Найти все сообщения от dfcz112
 
Регистрация: 30.01.2018
Сообщений: 29

Всё. Теперь работает всё кроме первой uploadFile. На ней падает втихую
Ответить с цитированием
  #16 (permalink)  
Старый 26.03.2018, 19:45
Интересующийся
Отправить личное сообщение для dfcz112 Посмотреть профиль Найти все сообщения от dfcz112
 
Регистрация: 30.01.2018
Сообщений: 29

По видимости, файл в uploadFile не успевает создаться и вызывается уже следующая функция, которой этот файл нужен, а так как его еще нет, то соответственно всё и падает. Что странно. Попробовал uploadFile через промис сделать, толку всё равно нет
Ответить с цитированием
  #17 (permalink)  
Старый 27.03.2018, 13:23
Кандидат Javascript-наук
Отправить личное сообщение для Audaxviator Посмотреть профиль Найти все сообщения от Audaxviator
 
Регистрация: 28.04.2017
Сообщений: 133

Вообще-то да.
Я попробовал вот так
function bar() {
	fs.readFile('_moment.js', (err, data) => {
			console.log('file');
		});
}

async function foo() {
	await bar();
	console.log('ok');
}

foo();

и так
function bar() {
	return new Promise( resolve => {
		fs.readFile('_moment.js', (err, data) => {
				console.log('file');
				resolve();
			});
	});
}

async function foo() {
	await bar();
	console.log('ok');
}

foo();

Вывод в разном порядке.
await на функции без промисов не действует.
Внутренности функции надо заворачивать в промис в любом случае - предполагается у него then или нет.

Последний раз редактировалось Audaxviator, 27.03.2018 в 13:30.
Ответить с цитированием
  #18 (permalink)  
Старый 27.03.2018, 14:53
Интересующийся
Отправить личное сообщение для dfcz112 Посмотреть профиль Найти все сообщения от dfcz112
 
Регистрация: 30.01.2018
Сообщений: 29

В общем, спасибо. Решил тем, что разделил всю котовасию на два запроса. Первый - для загрузки файла на сервер, второй для выполнения остальной логики. Всё заработало.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему некоторые операторы возвращают значения, а не ссылки? dump Общие вопросы Javascript 15 25.07.2012 16:28
Регулярные выражения. Почему находи именно так? jsuse Общие вопросы Javascript 4 21.11.2011 14:37
Свойства объекта, методы и this. Почему свойство вызывается с () ? jsuse Общие вопросы Javascript 2 04.11.2011 18:39
Prototype. Одноблочное определение псевдокласса. Литеральная форма не робит. Почему? GuardCat Общие вопросы Javascript 6 03.10.2011 12:46
Имитация селектов: огромный отступ непонятно откуда exec jQuery 0 23.06.2010 20:20