Ошибка теперь отображается в функции Azure (облако Azure)

#node.js #azure-functions

#node.js #azure-функции

Вопрос:

Скрипт работает нормально, когда я запускаю его на своем локальном компьютере. Я использую VS code с функцией Azure. Когда я запускаю код, получаю точную ошибку. Но я включаю функцию azure (облако Azure) и запускаю код, никаких следов ошибки нет. Я не смог найти никакого решения для своей проблемы. Пожалуйста, помогите мне.

Заранее спасибо.

 /* Connect Remote Server and do rest work */
var Client = require('ssh2').Client;
var conn = new Client();
var fs = require("fs"); // Use node filesystem

const HOST = 'xxx.xxx.xxx.xxx';
const POST = '22';
const USERNAME = 'xxxxxxxxxxx';
const PASSWORD = 'xxxxxxxxx';

module.exports = async function (context, req) {
    conn.on('error', function(err) {
        console.log('SSH - Connection Error: '   err);
    });

    conn.on('end', function() {
        console.log('SSH - Connection Closed');
    });

   conn.on('ready', function() {
       console.log('Client :: ready');
       conn.sftp(function(err, sftp) {
           if (err) console.log(err);
       });
   });

   conn.connect({
       host: HOST,
       port: POST,
       username: USERNAME,
       password: PASSWORD
   });
}
  

Комментарии:

1. Поскольку вы используете асинхронную функцию, ваша консоль. журналы, вероятно, выполняются после возврата вашей функции. Вы не ожидаете conn.connect , что приведет к запуску этих журналов вне контекста выполнения функции, и я думаю, именно поэтому вы не видите их при запуске в Azure. Глядя на код, похоже, что вам будет лучше использовать обратные вызовы вместо обещаний, поскольку вы сможете вызывать context.done error end и ready

2. Использование npmjs.com/package/ssh2-promise моудл, я решил свою проблему. Теперь я получаю точные ошибки в облаке Azure. Спасибо @nelak за ваш ценный отзыв

3. Рад, что помог вам. Дайте мне знать, считаете ли вы мой предыдущий комментарий достаточным ответом, и я опубликую его как таковой.

4. Да, я принял ваш последний комментарий об использовании await conn.connect , который помогает мне думать об использовании другого пакета узлов. Именно по этой причине я использовал npmjs.com/package/ssh2-promise посылка.

Ответ №1:

Поскольку вы используете асинхронную функцию, ваша консоль.журналы, вероятно, выполняются после возврата вашей функции. Вы не ожидаете conn.connect , что приведет к запуску этих журналов вне контекста выполнения функции, и я думаю, именно поэтому вы не видите их при запуске в Azure. Глядя на код, похоже, что вам будет лучше использовать обратные вызовы вместо обещаний, поскольку вы сможете вызывать context.done error end и ready