Node.js使用ssh2模块报错TypeError: <Object> is not a constructor如何解决
ssh2报错
TypeError: NodeSSH is not a constructor解决办法 问题根源
你混淆了两个不同的npm包:当前安装的ssh2@1.1.0包本身没有NodeSSH导出项,NodeSSH是另一个封装包node-ssh的导出构造器,所以调用new NodeSSH()时才会抛出类型错误。
不同场景的解决方案
场景1:继续使用已安装的ssh2包
直接使用ssh2内置的Client构造器即可,正确写法如下:
const { Client } = require('ssh2'); const c = new Client(); c.on('keyboard-interactive', function(name, instructions, instructionsLang, prompts, finish) { console.log('Connection :: keyboard-interactive'); finish(['pswd']); }).on('end', function() { console.log('Connection :: end'); // 注:原代码中的callback()需提前定义,否则会触发未定义报错 // console.log(callback()); }).on('error', function(error) { console.log(error); }).connect({ host: 'XX.XX.XXX.XXX', username: 'usr', port: 22, tryKeyboard: true, debug: console.log });
场景2:需要使用NodeSSH相关API
你需要先安装对应的依赖包,执行安装命令:npm install node-ssh
安装完成后即可使用你之前的第三种写法,不会再报错。
原有写法的问题说明
- 第一种写法:ssh2默认导出为包含多个属性的对象,不是构造函数,直接调用
new NodeSSH()会报错 - 第二种写法:仅正确导入了
Client构造器,后续实例化时没有使用new Client()而是继续调用不存在的NodeSSH,依旧报错 - 第三种写法:
ssh2包不存在NodeSSH导出项,解构得到的值为undefined,调用new undefined自然会抛出类型错误
内容的提问来源于stack exchange,提问作者eemilk
相关产品推荐
相关产品推荐

