#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