jquery - ExpressJS + jsdom — 范围问题

标签 jquery node.js express jsdom

我有一个已设置路由的expressJS Web 应用程序。由于我想利用各种 jquery 函数,因此我在 jsdom 环境中还存在多个函数。

我遇到的问题是我需要在 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);
    }
})

最佳答案

是的,可以,您有多种选择。我想这两部分将位于不同的文件中,否则您可以只在文件顶部定义一个变量并将其分配到 jsdom 中。根据您的应用程序的大小,您可能需要选择一个或另一个:

快速但不是很好的一个:在 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);
    }
})

好吧,通常不建议定义全局变量,以便维护健全的体系结构并且不产生名称冲突。让我们尝试定义第三个文件,您可以在其中附加函数:

// 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,
}

最好是根据您的情况改进名称。您可以拥有更复杂的结构,最后,教训是您必须将此函数保存在可从 Express.js 路由内部访问的位置。

关于jquery - ExpressJS + jsdom — 范围问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45702911/

相关文章:

jQuery 切换 HTML 代码的问题

node.js - 如何获得路径作为 Express 中的键?

javascript - 为什么 jQuery 选择器变量不能在命名空间内工作?

javascript - Axios GET 请求不起作用

node.js - 更新数组中的对象或使用唯一字段插入数组

javascript - 管理事件监听器内部的逻辑; (我应该如何添加监听器?或者我应该使用条件 "gatekeeper"代替?)

node.js - 重定向时 Express 上未设置 Csrf token

javascript - NodeJS 中 POST 请求的请求正文为空

javascript - jQuery 从 $(this) 获取最接近的同级元素不起作用

javascript - 从 JQuery 对象更新 HTML 文本