我正在编写一个(客户端) JavaScript库(一个节点/角度模块)。在这个库中,我使用了URLSearchParams类。
const form = new URLSearchParams();
form.set('username', data.username);
form.set('password', data.pass);
因为这是一个共享库,所以它被打包为npm模块。但是,在运行mocha单元测试时,我得到的错误是URLSearchParams未定义。原因似乎是节点在全局范围内没有URLSearchParams,但必须使用require('url')
导入
$ node
> new URLSearchParams()
ReferenceError: URLSearchParams is not defined
at repl:1:5
at sigintHandlersWrap (vm.js:22:35)
at sigintHandlersWrap (vm.js:73:12)
at ContextifyScript.Script.runInThisContext (vm.js:21:12)
at REPLServer.defaultEval (repl.js:340:29)
at bound (domain.js:280:14)
at REPLServer.runBound [as eval] (domain.js:293:12)
at REPLServer.<anonymous> (repl.js:538:10)
at emitOne (events.js:101:20)
at REPLServer.emit (events.js:188:7)
如何使URLSearchParams对node中的客户端代码可用,以便我可以使用mocha测试库?
这不起作用:
> global.URLSearchParams = require('url').URLSearchParams
undefined
> new URLSearchParams()
TypeError: URLSearchParams is not a constructor
at repl:1:1
at sigintHandlersWrap (vm.js:22:35)
at sigintHandlersWrap (vm.js:73:12)
at ContextifyScript.Script.runInThisContext (vm.js:21:12)
at REPLServer.defaultEval (repl.js:340:29)
at bound (domain.js:280:14)
at REPLServer.runBound [as eval] (domain.js:293:12)
at REPLServer.<anonymous> (repl.js:538:10)
at emitOne (events.js:101:20)
at REPLServer.emit (events.js:188:7)
发布于 2019-04-10 15:07:39
在使用Node8.10的AWS Lambda中,我必须这样做:
const {URLSearchParams} = require('url')
const sp = new URLSearchParams(request.querystring)
或
const url = require('url')
const sp = new url.URLSearchParams(request.querystring)
发布于 2019-07-09 14:03:59
如果我们想在我们的应用程序中支持大范围的nodejs
版本,我们可以使用一些脏代码,如下所示:
if(typeof URLSearchParams === 'undefined'){
URLSearchParams = require('url').URLSearchParams;
}
注意:使用条件执行require
不是最佳实践。
https://stackoverflow.com/questions/47266550
复制相似问题