在 Node.js 中服务器端实现 AJAX 请求的正确方法

2024-02-18

我正在构建一个搜索引擎,在客户端 POST 搜索字符串后在服务器端查询 Twitter 和 Wiki API。当我仍然完全是客户端时,对 Wiki API 的 AJAX 请求如下所示:

$.ajax({
    url: 'https://en.wikipedia.org/w/api.php',
    data: {
        action: 'query',
        list: 'search',
        srsearch: searchString, // variable pulled from input
        format: 'json',
        //origin: 'https://www.mediawiki.org'
    },
    xhrFields: {
        withCredentials: true
    },
    dataType: 'jsonp' // will probably use 'json' now that I'm server-side
}).done( function ( data ) {
    searchParser(data);
});
... //searchParser() below

现在,我已经实现了一个 Node.js Web 应用程序,它从主页上的客户端表单 POST 获取搜索字符串(索引.ejs)。然后服务器将呈现结果页面(结果.ejs)与 wiki 和 Twitter 搜索结果。 Twitter API 搜索已经处理BoyCook 的 TwitterJSClient https://github.com/BoyCook/TwitterJSClient.

我想知道执行此操作的最佳方法exact从我的服务器查询。我一直在环顾四周,找不到简洁的答案。有人对此有什么建议吗?


这是我基于的解决方案乔纳森的 https://stackoverflow.com/users/15031/jonathan-lonowski reply:

function wikiSearch () {

    var query = querystring.stringify({
        action: 'query',
        list: 'search',
        srsearch: searchString,
        srlimit: 10,
        srwhat: 'text',
        format: 'json'
    });
    var options = {
        hostname: 'en.wikipedia.org',
        path: '/w/api.php?' + query
    };

    var req = https.request(options, function(res) {

        if (!res) { 
            wikiData = "An error occured!";
            complete();
        };

        var body = '';
        console.log("statusCode: ", res.statusCode);
        res.setEncoding('utf8');

        res.on('data', function(data) {
            body += data;
        });

        res.on('end', function() {
            wikiData = wikiDataParser( JSON.parse(body) );
            complete();
        });
    });

    req.end();
    req.on('error', function (err) {
        wikiData = "<h2>MediaWiki API is currently down.</h2>";
        complete();
    })

};
... // complete() is below

这改变了wikiData根据请求或响应而变化。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Node.js 中服务器端实现 AJAX 请求的正确方法 的相关文章

  • 我在 MacBook M1 max 中的 nodejs 连接到数据库 oracle 时遇到问题帮助我

    Node js 中的错误消息 nodemon 启动node server js错误 错误 DPI 1047 无法找到 64 位 Oracle 客户端库 dlopen Users pitidev ldb Downloads instantcl
  • 无法使用 Nest CLI 创建新项目

    我正在关注this https docs nestjs com first steps创建 Nest 项目的教程 我已经安装了Nest CLI使用这个命令 npm i g nestjs cli 我使用以下命令检查了本地安装的软件包列表 发现
  • 如何保留数组的重复项

    在 Javascript 中 我试图只将重复项保留在数组中 例如我的初始数组是 1 1 2 3 3 3 3 4 5 5 结果应该是 1 3 5 我尝试过使用 indexOf 和 inArray 但无法弄清楚 我知道如何删除重复项 但保留它们
  • jQuery.post 改变 HTML 中的一些特殊字符

    TinyMCE 中的示例数据 和 以上HTML代码 p 10003 and 9786 9999 9986 p 之前 工作正常 在保存的文档中获得相同的字符 function save and submit var tinyGenData t
  • RegisterForEventValidation 只能在 Render 期间调用

    我有一个将从 jquery ajax 调用的 webmethod WebMethod public string TestMethod string param1 string param2 StringBuilder b new Stri
  • 如何将udp发送到udp node.js服务器?

    我对此很陌生 所以我真的不知道我在做什么 但我已经设置了一个 node js udp 服务器 我想从客户端 来自网站 向它发送一个数据包 但我不知道如何在 javascript 中做到这一点 或者是否可能 我不是在研究如何从 Node js
  • 在node.js中加载并执行外部文件

    从另一个节点js文件运行一个节点js文件是否容易 可能 例如 我有两个文件 test1 js 和 test2 js 我想从 test2 js 执行 test1 js 文件 我认为完成你想做的事情的更好方法是按照我的其他答案建议的去做 但是要
  • 无法将数据加载到 mvc 4 中的 jTable 中

    好的 我第一次尝试 jTable 我可以加载表 但这对我没有什么好处 因为它不会加载我的任何数据 当我调试程序时 我想要的表中的所有行都存储在我的列表中 因此我很困惑为什么当我运行应用程序时会弹出一个对话框 显示 与服务器通信时发生错误 H
  • 使用 Sequelize 实现单表继承

    有没有办法使用sequelize来创建单表继承 我希望有一个用于购买和 PartialPurchase 模型的 STI 其中我将有一个类型字段 该字段为 Purchase 或 PartialPurchase 以及类 Purchasing 和
  • 非 DOM 对象上的 jQuery 自定义事件

    我最近阅读了一些代码 其功能如下 bob name Bob Smith rank 7 bob bind nameChanged function bob trigger nameChanged 这似乎有效 但我在 jQuery 文档或源代码
  • Jquery从下拉列表中获取所选值的id

    我有一个下拉列表 可以从数据库获取值 如下所示 get getJobs function jobs seljobs jobs var i 0 jobs forEach function n alert job id n id 32 67 4
  • Facebook 应用程序无法获取会话

    我正在 Heroku 上为 Facebook 开发一个非常基本的 PHP 应用程序 它显示非常基本的用户信息 如姓名 个人资料图片 但该应用程序在 getToken 方法中停止 我在登录我的个人资料后尝试了该应用程序 但仍然出现相同的消息
  • 检查 touchend 是否在拖动后出现

    我有一些代码可以更改表的类 在手机上 有时表格对于屏幕来说太宽 用户将拖动 滚动来查看内容 但是 当他们触摸并拖动表格时 每次拖动都会触发 touchend 如何测试触摸端是否是触摸拖动的结果 我尝试跟踪dragstart和dragend
  • jquery window.open 在 ajax 成功中被阻止

    尝试在我的 ajax 成功调用中打开一个新的浏览器窗口 但是 它被阻止为弹出窗口 我做了一些搜索 发现用户事件需要绑定到 window open 才能避免这种情况发生 我还找到了这个解决方案 您可以在 ajax 之前打开一个空白窗口 然后在
  • 如何检查请求是否通过 Express 中的 https 发送

    我想强制某些路线始终在我的 Express 应用程序中使用安全连接 我如何检查以确保它使用 https 我在 heroku 上使用搭载 ssl 进行部署 我也在 Heroku 上部署 当他们使用 nginx 进行反向代理时 他们添加了一堆标
  • Jquery 中的动态滚动位置

    请帮助我解决以下情况 我有 3 个页面 当滚动到达第二页时 用户滚动页面 它必须找到特定的 ID 然后触发一个函数 一旦第三页开始 另一个函数就会触发 根据要求我不应该使用任何插件
  • 通过 node-http-proxy 保留基于 cookie 的会话

    我有一个简单的基于 Express 的 Node js Web 服务器 用于开发 JavaScript 应用程序 我将服务器设置为使用 node http proxy 来代理应用程序向在不同域和端口上运行的 Jetty 服务器发出的 API
  • Cloudfoundry:如何组合两个运行时

    cloundfoundry 有没有办法结合两个运行时环境 我正在将 NodeJS 应用程序部署到 IBM Bluemix 现在 我还希望能够执行独立的 jar 文件 但应用程序失败 APP 0 bin sh 1 java not found
  • :jQuery / Sizzle 中的 nth-of-type()?

    让我惊讶的是Sizzle http sizzlejs com jQuery 使用的选择器引擎 带有一个内置的 nth child 选择器 但缺少 nth of type 选择器 为了说明之间的区别 nth child and nth of
  • 如何使用 Passport 验证 Supertest 请求?

    我使用 Passport js 进行身份验证 本地策略 并使用 Mocha 和 Supertest 进行测试 如何使用 Supertest 创建会话并发出经过身份验证的请求 正如 zeMirco 指出的那样 底层superagent模块支持

随机推荐

  • SignalR 和浏览器连接限制

    我用 SignalR 制作了一个简单的应用程序进行测试 当页面加载时 它会调用服务器上的函数 该函数然后调用在屏幕上打印消息的客户端函数 我这样做是为了检查客户端和服务器功能是否正常工作以及 SignalR 通信是否正常 我的问题是 如果我
  • Colab 突然无法浏览目录

    过去几个月我一直在使用 Google Colab 在连接驱动器和输入 shell 命令时没有出现任何问题 然而今天突然出现了一个错误 我找不到任何解决办法 Colab 似乎神奇地无法浏览目录 对于 cd pwd mkdir 等目录的任何 b
  • WooCommerce - 登录后重定向到上一页

    我一直在寻找可以处理它几个小时的插件和片段 但没有成功 每个答案都不适合我 我的菜单中有 登录 链接 可通往 WooCommerce 我的帐户 页面 其中显示登录表单 我希望客户在成功登录后返回到单击 登录 链接的页面 wp get ref
  • Highcharts - 如何更新角度系列?

    我在柱形图中更新系列数据时遇到问题 一开始 当我的模型为空时 我设置一个空数组作为系列 然后在ngOnchanges方法我映射我的modelData到匹配的格式 不幸的是 图表仍然是空的 这是我的组件代码 export class Colu
  • PHP 验证 PayPal 捐赠

    我如何验证贝宝捐款 在用户面板中我有一个捐赠按钮 一旦有人真正捐款 我就想为他做点什么 但我不知道如何检查用户是否实际捐赠或只是单击了捐赠按钮 看看 Paypal 的IPN https www paypal com ipn 即时付款通知 当
  • 长时间运行 Jupyter 笔记本/实验室?

    我在 ec2 实例上的 tmux 会话中运行 Jupyter 我有运行时间非常长的单元格 但是当我关闭浏览器或笔记本电脑盖子时 笔记本电脑不再写入输出单元格 并且可能会使 python 内核崩溃 这是我在远程实例上启动实验室的方式 jupy
  • 如何在 Prometheus 中推送 Kubernetes 指标而不是拉取?

    我已经在我们的基础设施中配置了 Prometheus 进行监控 在我们的基础设施中 我们有一个正在运行的 EKS 集群 我必须在 Prometheus 中收集 EKS 指标 默认情况下 Prometheus 采用基于拉动的机制 这里我有一个
  • NUnit 最佳实践

    环境 Visual Studio Professional 2008 中的 C WinForms 应用程序 我一直在挖掘有关 NUnit 最佳实践的指导 作为一个在相对孤立的环境中工作的独立程序员 我希望这里的集体智慧可以帮助我 斯科特 怀
  • 如何为 SonarQube.Scanner.MSBuild.exe 提供参数?

    通过在线搜索和查看 sonarqube 文档 我唯一能找到的是 SonarQube Scanner MSBuild exe k KeyOfProject n NameOfProject msbuild exe C projectpath s
  • 如何在特定接口上打开套接字并接收 IPv4 和 IPv6 流量

    使用 IPv4 我可以将 绑定到特定地址来选择将用于接收数据包的接口 在某些情况下 也用于发送数据包 但这不是重点 在双栈 IPv6 IPV4 机器上 我遇到这个问题 我可以创建一个 6 套接字并使用它接收 4 个流量 但如果我想绑定到特定
  • 如何强制 powershell 重新加载自定义模块?

    我创建了一个模块 ActiveDirectory psm1 其中包含 powershellv5 中的一个类 我将该模块导入另一个名为 test ps1 的文件中 然后从该类中调用一个方法 test ps1 包含以下内容 using modu
  • 如何*取消*突出显示选定的文本?

    以前的一个question https stackoverflow com questions 58175015 vba powerpoint how to highlight selected text描述了如何使用 Font Highl
  • 除了第一个 cudaMalloc 调用之外,还有什么特定的函数可以初始化 GPU?

    由于 GPU 上的一些初始化工作 第一个 cudaMalloc 调用很慢 例如 0 2 秒 是否有任何函数只进行初始化 以便我可以分离时间 cudaSetDevice 似乎将时间减少到 0 15 秒 但仍然没有消除所有初始化开销 致电 cu
  • git 选择性恢复文件中的本地更改

    在我跟踪 svn 存储库的 git 存储库中 我对单个文件进行了多次编辑 现在我想恢复这些更改 如 svn revert 但只是文件的一部分 我希望能够查看文件上的差异 丢弃 恢复 我不想要的更改并保留我想要的更改 the git add
  • 使用 llvm-prof 收集 LLVM 边缘分析

    我正在使用这些命令来编译下面的代码以收集 trunk llvm 中的边缘 块分析 clang emit llvm c sort c o sort bc opt insert edge profiling sort bc o sort pro
  • 无法运行 spacy spancat (spancategorizer) 模型?

    我正在尝试训练 spancat 模型 但运气不佳 我正进入 状态 ValueError E143 Labels for component spancat not initialized This can be fixed by calli
  • 使用 Jackson 序列化自定义地图

    我想将自定义 Map 序列化为 JSON 实现地图接口的类如下 public class MapImpl extends ForwardingMap
  • 使Android WebView不存储cookie或密码

    我用一个适用于 Twitter OAuth 的 Android WebView https github com sugree twitter android sdk blob master twitter src com sugree t
  • Project Tango 平板电脑可以在户外使用吗?

    我正在寻找开发一款户外应用程序 但不确定探戈平板电脑是否可以在户外使用 其他深度设备往往在室外无法正常工作 因为它们依赖于从设备投射的红外光 然后在红外光从场景中的物体反射后进行观察 我一直在寻找这方面的信息 我找到的只是这个视频 http
  • 在 Node.js 中服务器端实现 AJAX 请求的正确方法

    我正在构建一个搜索引擎 在客户端 POST 搜索字符串后在服务器端查询 Twitter 和 Wiki API 当我仍然完全是客户端时 对 Wiki API 的 AJAX 请求如下所示 ajax url https en wikipedia