ExpressJS + jsdom – 范围问题

我有一个expressJS web应用程序与路线设置。 我也有几个函数存在于jsdom环境中,因为我想利用各种jquery函数。

我遇到的问题是我需要在expressJS作用域级别的jsdom中调用一个函数。

我真的希望这是可能的,因为这将大大简化我的生活。

例如:

// express app.get('/someRoute', function(request, response){ myFunction( request.data, function( getResponse ){ response.status( 200 ).send( getResponse ); } }) //jsdom jsdom.env('html', function(err, window) { ..... myFunction( a, callback ){ // <some jquery-only feature that I need> callback(a); } }) 

是的,你可以,你有几个select。 我想这两个部分将在不同的文件,否则你可以只在文件的顶部定义一个variables,并在jsdom分配。 根据您的应用程序的大小,您可能需要select一个或另一个:

快速但不是很好的:在jsdom.env函数中,定义一个全局函数,可以从ExpressJS路由器访问。

 // express app.get('/someRoute', function(request, response){ global.myJSDomFunction(request.data, function( getResponse ){ response.status( 200 ).send( getResponse ); } }) //jsdom jsdom.env('html', function(err, window) { ..... global.myJSDomFunction = myFunction( a, callback ){ // <some jquery-only feature that I need> callback(a); } }) 

好的,通常不build议定义全局variables,以保持一个健全的架构,不会产生名称冲突。 让我们试着定义一个你可以附加你的函数的第三个文件:

 // express const fnContainer = require('../fnContainer') app.get('/someRoute', function(request, response){ fnContainer.myJSDomFunction(request.data, function( getResponse ){ response.status( 200 ).send( getResponse ); } }) //jsdom const fnContainer = require('../fnContainer') jsdom.env('html', function(err, window) { ..... fnContainer.myJSDomFunction = myFunction( a, callback ){ // <some jquery-only feature that I need> callback(a); } }) //fnContainer.js module.exports = { myJSDomFunction: null, } 

最好的办法是根据你的情况改进名字。 您可以有更复杂的结构,最后,您必须将此function保存在Express.jspath内可访问的位置。