我在Node.JS中得到了一个SyntaxError,但我无法从日志消息中找出错误的来源
我正在Azure上运行一个Node应用程序。 这是一个Web API,当我尝试调用它时,我在Node控制台中看到这条消息:
Application has thrown an uncaught exception and is terminated: SyntaxError: Unexpected token ( at exports.runInThisContext (vm.js:53:16) at Module._compile (module.js:414:25) at Object.Module._extensions..js (module.js:442:10) at Module.load (module.js:356:32) at Function.Module._load (module.js:313:12) at Module.require (module.js:366:17) at require (module.js:385:17) at Object.<anonymous> (D:\home\site\wwwroot\app.js:17:23) at Module._compile (module.js:435:26) at Object.Module._extensions..js (module.js:442:10)
我通过eslint
运行了我的整个代码,没有发现任何语法错误。 它也可以在我的本地机器上正常运行,但不能在Azure上运行。
上面的消息指向app.js中的第17行和第23列,这是一个require
:
let warehouseExport = require('./routes/warehouse-export-api');
我在eslint
的文件中特别运行eslint
和jshint
,并且没有语法错误。
什么是其他方法我可以得到语法错误的确切位置,为什么可能是在Azure上的代码失败,但在我的本地机器上运行?
我试过的:
- 包裹在尝试抓住并抓住行号 – 它显示
undefined
:
try { var warehouseExport = require('./routes/warehouse-export-api'); } catch (error) { console.log(error + ', line ' + error.lineNumber); }
您应该检查在Azure上安装的nodejs的版本。 也许它是<= 4,它不支持let
关键字。 只是一个疯狂的猜测。
错误的原因是Node版本以某种方式被重置为4.2.4。
当我去Azure门户并运行node --version
,我得到版本8.1.4。
但是,如果我console.log
节点版本内我的脚本,它仍然是4.2.4。
我将调查为什么会发生,以及如何解决这个问题,但现在很明显,这个错误是由于async function
没有被旧的节点识别。
更新:指定节点版本的package.json
文件以某种方式被覆盖,这是导致问题的原因。
- 使用Node.js在Azure托pipe上创buildWeb套接字服务器?
- 如何从服务器端注册设备到Azure通知中心(使用NodeJS sdk)?
- 我如何将一个更快的语言与Express.js后端集成?
- 我可以在Microsoft Azure的Node.JS中使用本地“fs”文件系统吗?
- 我们是否需要在bitbucket上推送node_modules
- 带有Azure错误请求的Node.js Express
- Azure Node.js Web应用程序的自定义启动命令(ES2015 / babel)?
- 是否有可能在azure或openshift上只承载节点js代码?
- 从自定义node.js API中检索Azure Blob