Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ECMAScript 6对node.js及其不同包(如express body_解析器)的本地支持_Javascript_Node.js_Express_Ecmascript 6 - Fatal编程技术网

Javascript ECMAScript 6对node.js及其不同包(如express body_解析器)的本地支持

Javascript ECMAScript 6对node.js及其不同包(如express body_解析器)的本地支持,javascript,node.js,express,ecmascript-6,Javascript,Node.js,Express,Ecmascript 6,我正在尝试将旧的nodejs(版本6.x)rest服务项目迁移到最新的nodejs(版本9.6.1)rest服务项目,并希望在没有任何transplier的情况下遵循ECMAScript 6规范 当前项目使用express、body parser、moment、multer、cors、ethereumjs tx、secp256k1、requirejs和其他一些nodejs模块,所以我的问题是,所有这些不同的模块以及nodejs是否在本地支持ECMAScript 6规范 在互联网上,我看到了许多使

我正在尝试将旧的nodejs(版本6.x)rest服务项目迁移到最新的nodejs(版本9.6.1)rest服务项目,并希望在没有任何transplier的情况下遵循ECMAScript 6规范

当前项目使用express、body parser、moment、multer、cors、ethereumjs tx、secp256k1、requirejs和其他一些nodejs模块,所以我的问题是,所有这些不同的模块以及nodejs是否在本地支持ECMAScript 6规范

在互联网上,我看到了许多使用bable transplier的解决方案,但我不想采用这种方法

我再次发现了express的ECMAScript 6实现,但它仍然不起作用。默认导入和使用带@的装饰时失败

ECMAScript 6对node.js的支持也是如此,it模块已经实现,或者我应该等一段时间

编辑 我同意ECMAScript 6中不支持decorator模式,但导入和导出也不起作用,我尝试运行以下代码

import express from 'express'
import restful from 'express-restful-es6'

var server = express()

console.log(restful)
restful.configure(server,{
    dirname: '/projectlocation' + '/resources'
})

server.listen(9000)
console.log("Listening on port 9000 .....")
但有以下错误

> ethereum-rest-api@1.0.0 start /projectlocation/ethereum-rest-api
> /nodelocation/bin/node --experimental-modules index.mjs

(node:31753) ExperimentalWarning: The ESM module loader is experimental.
{ Rest: [Function: Rest],
  middleware: [Function: middleware],
  default: Restful {} }
TypeError: restful.configure is not a function
    at file:///projectlocation/index.mjs:7:9
    at ModuleJob.run (internal/loader/ModuleJob.js:102:14)
    at <anonymous>
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! project@1.0.0 start: `/nodelocation/bin/node --experimental-modules index.mjs`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the project@1.0.0 start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
以太坊休息区-api@1.0.0启动/项目位置/以太坊rest api >/nodelocation/bin/node——实验模块索引.mjs (节点:31753)实验警告:ESM模块加载程序是实验性的。 {Rest:[函数:Rest], 中间件:[功能:中间件], 默认值:Restful{} TypeError:restful.configure不是函数 在file:///projectlocation/index.mjs:7:9 在ModuleJob.run(internal/loader/ModuleJob.js:102:14) 在 npm错误!代码失效循环 npm错误!错误1 npm错误!project@1.0.0开始:`/nodelocation/bin/node——实验模块index.mjs` npm错误!退出状态1 npm错误! npm错误!失败project@1.0.0开始脚本。 npm错误!这可能不是npm的问题。上面可能还有其他日志输出。
再次@lorefnon如果模块不支持ECMAScript 6样式的导入/导出,我将能够在代码中导入它,例如,如果我尝试使用最新的表达式。js我可以使用ECMAScript 6语法导入它,而不使用任何transplier。

ES6完全向后兼容。因此,库和SDK不必做任何额外的事情来符合ES6

当然,他们可能(也可能不)选择使用ES Next功能,但通常的做法是,任何使用其目标节点版本不支持的功能的库,都会在发布过程中传输其源代码,这样用户就不必费心传输库

如果您确保应用程序使用node支持的ES6功能,则不必使用transpiler

我再次发现了express的ECMAScript 6实现,但它仍然不起作用。默认导入和使用带@的装饰时失败

他们的示例使用节点当前不支持的decorator语法

但是,如果要避免透明化,可以将公开的函数用作普通函数,而不是装饰器:

@Rest('/api')
class ApiResource {
    use(){
        //authorize
        console.info("authorize");
        this.next();
    }

}
基本上用于:

class ApiResource_ {
    use(){
        //authorize
        console.info("authorize");
        this.next();
    }
}

const ApiResource = Rest('/api')(ApiResource_)

ES6完全向后兼容。因此,库和SDK不必做任何额外的事情来符合ES6

当然,他们可能(也可能不)选择使用ES Next功能,但通常的做法是,任何使用其目标节点版本不支持的功能的库,都会在发布过程中传输其源代码,这样用户就不必费心传输库

如果您确保应用程序使用node支持的ES6功能,则不必使用transpiler

我再次发现了express的ECMAScript 6实现,但它仍然不起作用。默认导入和使用带@的装饰时失败

他们的示例使用节点当前不支持的decorator语法

但是,如果要避免透明化,可以将公开的函数用作普通函数,而不是装饰器:

@Rest('/api')
class ApiResource {
    use(){
        //authorize
        console.info("authorize");
        this.next();
    }

}
基本上用于:

class ApiResource_ {
    use(){
        //authorize
        console.info("authorize");
        this.next();
    }
}

const ApiResource = Rest('/api')(ApiResource_)

似乎模块正在使用。这不是ES6的功能。我相信这是建议的未来功能(ES6之外),您要么需要一个支持装饰器的环境,要么需要对其进行传输。您能展示一下您试图在这个库中使用的代码吗?node.js的当前8.x版本非常支持ES6,甚至支持许多ES7功能。您不必等待ES6支持。另一方面,装饰程序不是ES6功能。@jfriend00 2请检查我更新的帖子,我在其中添加了一些代码和错误消息。如果您在导入和导出方面有问题,为什么接受一个根本没有解决该问题的答案?或者,问题实际上不是由导入/导出引起的吗?似乎模块正在使用。这不是ES6的功能。我相信这是建议的未来功能(ES6之外),您要么需要一个支持装饰器的环境,要么需要对其进行传输。您能展示一下您试图在这个库中使用的代码吗?node.js的当前8.x版本非常支持ES6,甚至支持许多ES7功能。您不必等待ES6支持。另一方面,装饰程序不是ES6功能。@jfriend00 2请检查我更新的帖子,我在其中添加了一些代码和错误消息。如果您在导入和导出方面有问题,为什么接受一个根本没有解决该问题的答案?或者,这个问题实际上不是由导入/导出引起的吗?如果您查看问题中提到的实际库,它使用的是decorator,而不是ES6的一部分。所以,这个问题实际上不是关于ES6特性的,而是关于ES6之外的特性。这并不完全正确。他们的示例确实使用了decorator,但他们发布的代码却没有。因此,如果应用程序代码不使用decorator,而是将它们用作函数调用,那么您可以在不使用透明的情况下使用库