javascript需要eWebLink api不工作?

javascript需要eWebLink api不工作?,javascript,node.js,Javascript,Node.js,我第一次尝试使用javascript,但似乎无法从命令行上的bash shell中正确运行脚本 我想从云中服务器上的bash调用ewelink.cc(通过API的家庭自动化网站)。实现这一点的工具集似乎是用javascript编写的。因此,我试图从我的脚本中设置它,使用eWLink网站打开车库门 我在云系统中的服务器是Ubuntu 18.04 LTS # node -v v10.15.3 我正在尝试使用github中的以下脚本: https://github.com/skydiver/ewel

我第一次尝试使用javascript,但似乎无法从命令行上的bash shell中正确运行脚本

我想从云中服务器上的bash调用ewelink.cc(通过API的家庭自动化网站)。实现这一点的工具集似乎是用javascript编写的。因此,我试图从我的脚本中设置它,使用eWLink网站打开车库门

我在云系统中的服务器是Ubuntu 18.04 LTS

# node -v
v10.15.3
我正在尝试使用github中的以下脚本:

https://github.com/skydiver/ewelink-api
eWLink api是用javascript编写的,旨在通过eWLink api连接到我已配置到其物联网生态系统中的设备,如车库门。事实上,我现在可以通过手机上的应用程序来控制车库门,这样所有的设置都是正确的

这是我正在运行的脚本。它被称为ewelink.js。它是github的eWebLink api包中提供的示例脚本

const ewelink = require('ewelink-api');

/* instantiate class */
const connection = new ewelink({
  email: 'blah@blah.org',
  password: 'blahblah',
  region: 'us'
});

/* get all devices */
const devices = await connection.getDevices();
/* const devices = connection.getDevices();  */
console.log(devices);
下面是我如何调用脚本和结果:

# node ewelink.js
/root/node_modules/ewelink.js:11
const devices = await connection.getDevices();
                ^^^^^

SyntaxError: await is only valid in async function
    at new Script (vm.js:80:7)
    at createScript (vm.js:274:10)
    at Object.runInThisContext (vm.js:326:10)
    at Module._compile (internal/modules/cjs/loader.js:664:28)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10)
    at Module.load (internal/modules/cjs/loader.js:600:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:539:12)
    at Function.Module._load (internal/modules/cjs/loader.js:531:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:754:12)
    at startup (internal/bootstrap/node.js:283:19)
由于require('ewelink-api')我认为/猜测我正在运行的ewelink.js脚本应该与ewelink api目录位于同一目录中。这是正确的吗

因为我是一个JavaScriptNoob,我知道我在这里做的一些蠢事使它无法工作。我尝试在其他目录中执行脚本,并得到相同的结果

该项目的guthub文档对我、读者和javascript技能集做出了一些相当高的假设

更新 在我努力实现RTFM的过程中,我发现了以下几点:

where require查找文件的规则可能有点复杂,但一个简单的经验法则是,如果文件不是以“/”或“/”开头,那么它要么被视为核心模块(并且选中了local Node.js路径),要么被视为本地Node_modules文件夹中的依赖项。如果文件以“/”开头,则它被视为与名为require的文件相对的文件。如果文件以“/”开头,则视为绝对路径。注意:您可以省略“.js”,如果需要,require将自动附加它。有关更多详细信息,请参阅官方文档

所以我更新了他的要求:

const ewelink = require('./ewelink-api');
我得到了同样的结果。完全公开,我试图在以下目录中工作:

# pwd
/root/node_modules
在该目录中,是我正在尝试使用的ewelink.js文件和ewelink api目录

我正在运行的eWLink.js脚本应该与eWLink api目录位于同一目录中。这是正确的吗

这是不正确的。由于
require()
调用中的字符串不是路径,因此它将使用来自的包,而不是任何本地包。因此,从何处运行脚本并不重要

const-ewelink=require('ewelink-api')

如错误所述,
await
关键字仅在异步函数中可用。async/await特性本质上允许您以同步方式编写异步代码

要使代码正常工作,最简单的方法是将代码封装在异步函数中并立即运行它

const-ewelink=require('ewelink-api');
(异步()=>{
const connection=new-link({
电邮:'blah@blah.org',
密码:“blahblah”,
地区:“美国”
});
/*获取所有设备*/
const devices=wait connection.getDevices();
/*const devices=connection.getDevices()*/
控制台日志(设备);
})();

谢谢!现在我要去比赛了!