@olmax04

Puppeteer,expressjs,JavaScript. Как передать переменную из 1 функции в другую?

Пишу функцию которая будет получать переменную page(и browser) в 1 функции,при помощи callback передавать её в другую функцию. В данный момент остановился на проблеме её передачи,так как задать глобально переменную не выйдет(это нарушит мой дальнейший план связанный с многопоточностью приложения). Если кто знает - помогите,как я могу это сделать?
router.post(
  '/check',
  [check('user_login', 'Некорректный логин').isLength({ min: 3 })],
  async function checkdata(req, res) {
    try {
      console.log('Login body:', req.body);
        let browser = await puppeteer.launch({
          devtools:true,
        });
        let page = await browser.newPage()
        await page.goto('https://google.com')
        await page.type('input[name=q]',req.body.user_login)
        await page.screenshot({path:'loximi.png'})
        res.json({ message: 'completed' });
        return new Promise (async (resolve)=>{
          resolve(page);
        })
    } catch (e) {
      console.log(e.message);
      res
        .status(500)
        .json({ message: 'Что-то пошло не так, попробуйте снова' });
    }
  }
);

// /api/auth/register
router.post(
  '/register',
  [
    check('user_login', 'Некорректный логин').isLength({ min: 3 }),
    check('user_password', 'Минимальная длина пароля 6 символов').isLength({
      min: 6,
    }),
  ],
  async (req, res) => {
    try {
      console.log('Password body:', req.body);
      console.log(checkdata())
      await page.type('input[name=q]', checkdata())
      res.json({ message: 'completed' });


    } catch (e) {
      console.log(e.message);
      res
        .status(500)
        .json({ message: 'Что-то пошло не так, попробуйте снова' });
    }
  }
);
  • Вопрос задан
  • 80 просмотров
Решения вопроса 1
@olmax04 Автор вопроса
Всё оказалось проще. Сделал привязку к сессии создав hash.

var createHash = require('hash-generator');
let session = createHash(12);
И потом задал переменные в самих post запросах которые будут использоваться в роутах.

//задаем переменную
app.set(`login_${session}`, user_login);
//вызываем её в других роутах
app.get(`login_${session}`);
Переменную session передаю через react в каждый роут,и таким образом всё работает
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы