NodeJS 语法问题

Posted

技术标签:

【中文标题】NodeJS 语法问题【英文标题】:NodeJS Syntax issue 【发布时间】:2019-12-29 06:25:15 【问题描述】:

我的节点 JS 代码有问题,我收到错误消息:

/root/dev/remote/remote.js:43
.on('connection', async (socket) => 
                        ^

SyntaxError: Unexpected token (
    at createScript (vm.js:56:10)
    at Object.runInThisContext (vm.js:97:10)
    at Module._compile (module.js:549:28)
    at Object.Module._extensions..js (module.js:586:10)
    at Module.load (module.js:494:32)
    at tryModuleLoad (module.js:453:12)
    at Function.Module._load (module.js:445:3)
    at Module.runMain (module.js:611:10)
    at run (bootstrap_node.js:394:7)
    at startup (bootstrap_node.js:160:9)
Launching Chromium
[486:527:0824/012248.628260:ERROR:bus.cc(394)] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix")

(google-chrome:486): LIBDBUSMENU-GLIB-WARNING **: 01:22:49.591: Unable to get session bus: Unknown or unsupported transport ?disabled? for address ?disabled:?
[486:610:0824/012250.491318:ERROR:object_proxy.cc(619)] Failed to call method: org.freedesktop.DBus.Properties.Get: object_path= /org/freedesktop/UPower: org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.UPower was not provided by any .service files
[486:610:0824/012250.493116:ERROR:object_proxy.cc(619)] Failed to call method: org.freedesktop.UPower.GetDisplayDevice: object_path= /org/freedesktop/UPower: org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.UPower was not provided by any .service files
[486:610:0824/012250.497596:ERROR:object_proxy.cc(619)] Failed to call method: org.freedesktop.UPower.EnumerateDevices: object_path= /org/freedesktop/UPower: org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.UPower was not provided by any .service files
^C[509:509:0824/012302.391101:ERROR:x11_util.cc(109)] X IO error received (X server probably went away)
[486:486:0824/012302.391250:ERROR:chrome_browser_main_extra_parts_x11.cc(62)] X IO error received (X server probably went away)

但是,这个语法非常好。

我尝试过重新安装节点/使用不同的版本,但我不确定这是否与此有关。

这里是 remote.js(还有更多,这只是相关区域)

const server = require('http').createServer();
const socketIO = io(server);

socketIO
.on('connection', async (socket) => 
    socket
    .use((socket, next) => 
        if(true) return null;
        if(socket.handshake.query && socket.handshake.query.token)
            jwt.verify(socket.handshake.query.token, 'SECRET_KEY', (err, decoded) => 
                if (err) return next(new Error('Authentication error'));
                socket.decoded = decoded;
                next();
            );
        else
            next(new Error('Authentication error'));
        
    )

有人知道这是什么吗?我试图在我的 Centos 7 VPS 上将我的 chromium 实例显示到浏览器中并通过浏览器控制它。

【问题讨论】:

什么版本的node.js?该错误看起来像是不知道async 或胖箭头函数的旧版本。您可以尝试删除两者(替换为经典功能),看看是否会出现该错误。 @jfriend00 我在节点 v6.17.1 上尝试现在,但我认为这不会解决它:( @jfriend00 我刚刚意识到我的节点严重过时,感谢 centos。打算尝试更新或弄清楚如何。 我不认为 node.js v6 支持 async 没有特殊的命令行标志。如果您想使用现代语言功能,绝对值得获得更新版本的 node.js。 @jfriend00 你是对的!谢谢 :) 我更新了,所有错误都消失了!谢谢! 【参考方案1】:

默认情况下,您的旧节点 v6.17 将不支持 async 关键字(ES7 功能)。有一个命令行开关可能会启用一些较新的功能,但老实说,那个版本有点旧。

由于 node.js 现在已达到 v12 的稳定版本,如果您想使用最新的语言功能,您可能需要升级到更新的 node.js 版本。

【讨论】:

以上是关于NodeJS 语法问题的主要内容,如果未能解决你的问题,请参考以下文章

pg nodejs 包导致“json 类型的输入语法无效”

NodeJS sequelize 自动生成模型并运行迁移 SQL 语法错误

nodejs链接mysql 中的问题

带你入门nodejs第一天——node基础语法及使用

带你入门nodejs第一天——node基础语法及使用

NodeJS模块和ES6模块系统语法及注意点