Nodejs、expressjs - 如何提供延迟响应

2024-07-03

我正在构建一个网络服务,我使用nodejs、phantomjs 和expressjs。我正在学习这三个。

我想在处理完客户的查询后向客户提供延迟响应。例如,

我正在处理来自客户端的某些输入,然后,我想在后端处理数据,这平均需要大约 10 秒。然后我想将此页面提供给客户。

节点中是否可以对同一请求发送多个响应或延迟响应,以便模板自动更新内容。

或者,我应该使用相同的方法,比如将 json 存储在服务器的文件中,然后使用 ajax 来服务该页面,该 ajax 将查询该页面。

请帮我。这是我写的代码,

app-server.js(主文件):

// import express module
var express = require('express');
var bodyParser = require('body-parser');
var app = express();

// define all required template files to be served and also define the template engine
app.engine('.html', require('ejs').__express);
app.set('views', __dirname + '/views');
app.set('view engine', 'html');

// Useful modules
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));

// import the routes
require('./router')(app);
app.listen(8080);

路由器.js:

var crypto = require('crypto');
var express = require('express');

module.exports = function (app) {

    // define the static routes.
    app.use('/static', express.static('./static'));
    app.use('/media', express.static('./media'));

    //defining the controller.
    var parserlib = require('./controller.js')

    // Define the home root path
    app.get('/', function (req, res) {
        // shows the home search page.
        res.render('index', {content:'template success'});
    });

    app.get('/search', function(req, res){
        res.redirect('/');
    });

    app.post('/search', parserlib.parserlib);
}

控制器.js:

var crypto = require('crypto');
var path = require('path')
var childProcess = require('child_process')

exports.parserlib= function(req, res){

    var output = '';
    var url = req.body.search_url;

    var childArgs = [
     path.join(__dirname, 'external-script.js'),
     url,
    ]

    // execute the script in a separate thread.
    childProcess.execFile(binPath, childArgs, function(err, stdout, stderr) {
        // handle results
        console.log(stdout);
        output = stdout;
        //console.log(err);
        //res.send(output);
    });
    //res.send(output);
};

所以,我想看到的是,首先向客户端发送响应,说明其正在加载,然后我想用处理后的数据更新。在其他语言中,不可能发送多个响应。不确定nodejs。

另外,我是否必须将处理后的库的 json 输出存储到文件中,然后使用 ajax 进行查询?或者是否可以直接将json对象更新到客户端?

Thanks


这不是 HTTP 的工作原理。客户不会期望它。这与 Node 或任何其他框架无关。执行您尝试执行的操作的方法是实际发送正在加载的响应,然后使用其他一些机制来报告状态。

例如,您可以设计一个 RESTful API。在该 RESTful API 中,您可以定义一个用于创建新事物的端点:

POST /api/事物

客户端将数据发布到该处以创建新事物。响应应该是提供新创建资源的位置的内容,例如 HTTP 301/api/things/1.

如果用户去/api/things/1而且事情还没有完成,那么你可以做一个临时重定向(303)到/api/things/1/status它提供了一些有用的状态信息,或者只是发出 404。

如果您确实想发回服务器端推送的状态信息,那么您应该考虑 WebSockets 或某种纯 Socket API,这两种 API 都不是由 Express 提供的,但两者都可以在 Node 中使用(查看socket.io图书馆和net核心库)

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

Nodejs、expressjs - 如何提供延迟响应 的相关文章

  • Docker 无法从其他服务连接到 redis

    我不知道如何连接到我的redis我的服务app服务 使用 Docker 版本 18 03 1 ce 为 Mac 构建 9ee9f40ocker 我尝试将我在类似问题上发现的各种方法联系起来 const client redis create
  • 我应该担心 JavaScript 支持吗?

    我开发了一个支持ajax 的网站 然而 该网站目前无法在没有 JavaScript 的情况下运行 该网站在我测试过的任何浏览器以及 iPhone 诺基亚手机上都运行良好 但是 我还应该担心 javascript 支持吗 我知道有一些技术可以
  • 是否可以从 JavaScript 注入的内联样式中减去一个数字?

    我在 HTML 中添加了内联样式 例如style left 10px 我可以添加 减去该数字吗 我想创建一个可以删除的规则8px从该数字开始 无论该数字是多少 我尝试使用丑陋的 importanthack 来覆盖它 但是当初始值改变时这没有
  • 使用来自外部 JS 文件的 Google Analytics 异步代码

    我正在尝试将 Google Analytics 跟踪代码的异步版本添加到网站 我想将 JavaScript 保存在一个单独的文件中 并从那里调用它 这是我的 js 文件中当前的内容 function addLoadEvent func va
  • redux fetch body 不能在无 cors 模式下使用

    我有一个调用函数的操作 dispatch Api url my url method POST data data 这里我将数组作为数据传递 import fetch from isomorphic fetch export default
  • 在 firefox-extension 的新选项卡中打开链接

    我开发了一个网络应用程序来将其用作 Firefox 扩展 在 Firefox 中 我将它包含在 iframe 中 如下所示 现在我想在我的应用程序中有一些传出链接 如果我只使用普通的链接标记 例如 a href http mywebapp
  • 如何在新窗口中获取dom元素?

    JavaScript 中的一个简单任务是打开一个新窗口并在其中写入 但我需要在一个dom元素中写入一个带有ID的div var novoForm window open somform html wFormx width 800 heigh
  • 使用 SVG 的部分边框/描边

    我正在使用 svg d3 创建由 矩形 元素组成的图表 为每个矩形添加部分边框 描边 仅在矩形顶部 的最佳方法是什么 Thanks 我不认为 SVG 支持仅描边矩形或路径的一部分 描边不像 CSS 边框 您还有其他一些选择 所有这些都需要一
  • Webpack - devtool:CSS 的源映射和 JS 的 eval-source-map?

    如果我使用 devtool source map 它与 CSS 配合得很好 但是 我的 JavaScript 变量名并不有趣 所以 如果我使用 devtool eval source maps 生活很美好 调试 JS 但我的 CSS 然后指
  • 有没有可靠的方法在 IE11 中使用 ctx.drawImage() ?

    我有一个脚本 可以根据数据查询创建动态 SVG 图形 我需要将它们粘贴到 PDF 中 为此我使用 jsPDF 不幸的是 jsPDF 自己的 addSVG 似乎不起作用 所以我花了一些时间尝试使用画布将 SVG 转换为 PNG 我似乎可以将
  • jquery 调整 div 上的侦听器大小

    这就是情况 我有 2 个 div 彼此相邻 一个 div 的高度非常动态 这基本上意味着它可以增长和缩小以适应其内容 例如 这个 div 具有可以折叠打开或关闭的内容 或者可以扩展以适合 ajax 加载内容的容器 现在 这个 div 旁边是
  • 检查纬度和经度是否在谷歌地图圆内

    以下是我正在寻找的期望结果 我想知道的是 我使用中心点纬度和周围半径创建了圆 现在我想知道 如何检查 计算 纬度和经度是否在该区域之内或之外 如果您能给我 JavaScript 代码示例 我将不胜感激 我正在使用 Google 地图 API
  • 错误:扩展器控件可能无法在 PreRender 之前注册

    我正在尝试将 Ajax 控件添加到我的 aspx 页面 我刚刚添加了
  • 如何延迟显示/隐藏引导工具提示?

    我无法使 Twitter 引导工具提示的数据延迟属性正常工作 我使用它的方式如下 这是我的使用方法 a href with delay a 但我没有看到显示 隐藏有任何延迟 有什么想法吗 最后我让它与数据属性一起工作 data delay
  • Chart.js 忽略画布高度和宽度

    继Chart js 文档 http www chartjs org docs getting started creating a chart我正在尝试绘制一个小图表
  • 使用 RaphaelJS 确定图像何时加载到 svg 中

    我正在尝试弄清楚如何确定 svg 图像何时加载到浏览器中 我正在使用 Raphael JS 并且我已经尝试过 var image paper image path 0 0 10 10 image node addEventListener
  • 不固定高度的滚动div

    我需要构建一个动态调整大小的滚动 div div 应动态调整大小以适应屏幕 但如果内容不适合屏幕 它应该显示一个滚动条 因此浏览器自己的滚动条永远不需要激活 我可以通过在 div 中放置另一个 div 并使用来让滚动条出现在 div 中ov
  • IOS - React Native - 未处理的 JS 异常:SyntaxError

    每当我创建新的 React Native 项目时 我都会遇到问题 显示红色屏幕 并在 xcode 控制台中收到以下错误消息 嗨 我有同样的问题 在这里找到了解决方案 https github com facebook react nativ
  • 如何构建我的 PHP 项目?

    我即将开始另一个大型 PHP 项目 这次 我打算让项目文件夹变得整洁 所以我有几个关于保持我的项目干净和干燥的问题 如何区分 PHP 源文件和浏览器应访问的 PHP 文件 换句话说 我如何清楚哪些 PHP 文件提供输出 哪些提供函数或类定义
  • JS:在调用文件中的每个其他函数之前调用某个函数

    我有一个关于在 JS 中更好地重用代码的问题 例如我有文件functions js具有以下功能 export const a gt export const b gt export const c gt const foo gt 我想在调用

随机推荐

  • 如何在不使用循环的情况下从数据表中过滤空行?

    我的情况是数据表可能包含大量行 因此 我无法使用循环迭代和更新数据表 我尝试过以下代码 from row in table AsEnumerable where table Columns Any col gt row IsNull col
  • 将具有外键的第三个表中的记录复制到其他表

    我有三个表 表 1 作为主表 表 2 作为表 1 的详细信息 表 3 作为表 2 的详细信息 TABLE1 PK1 INTEGER FD1 VARCHAR 100 TABLE2 PK2 INTEGER FK1 INTEGER FD2 VAR
  • 将具有外键的第三个表中的记录复制到其他表

    我有三个表 表 1 作为主表 表 2 作为表 1 的详细信息 表 3 作为表 2 的详细信息 TABLE1 PK1 INTEGER FD1 VARCHAR 100 TABLE2 PK2 INTEGER FK1 INTEGER FD2 VAR
  • 如何在 PHP 中访问 JSON 解码数组

    我返回了一个数组JSON数据类型来自javascript to PHP 我用了json decode data true 将其转换为关联数组 但是当我尝试使用关联数组时index 我收到错误 Undefined index 返回的数据是这样
  • 如何在 PHP 中访问 JSON 解码数组

    我返回了一个数组JSON数据类型来自javascript to PHP 我用了json decode data true 将其转换为关联数组 但是当我尝试使用关联数组时index 我收到错误 Undefined index 返回的数据是这样
  • 帮助将 Reflector 解构转化为可编译代码

    所以我正在 Reflector ing 一些框架 2 0 代码并最终得到以下解构 fixed void voidRef3 void someMember 这不会编译 因为 The right hand side of a fixed sta
  • 帮助将 Reflector 解构转化为可编译代码

    所以我正在 Reflector ing 一些框架 2 0 代码并最终得到以下解构 fixed void voidRef3 void someMember 这不会编译 因为 The right hand side of a fixed sta
  • 带参数的 Rails link_to 远程

    我想使用链接触发模型的远程操作 基本上 这个链接所需要做的就是触发一个带有一个参数的方法 这是我的代码 link to Move Up reorder collection folder path collection folder reo
  • 带参数的 Rails link_to 远程

    我想使用链接触发模型的远程操作 基本上 这个链接所需要做的就是触发一个带有一个参数的方法 这是我的代码 link to Move Up reorder collection folder path collection folder reo
  • 如何转义字符串以在 Boost Regex 中使用

    我刚刚开始了解正则表达式 并且正在使用 Boost Regex 库 我需要使用包含特定 URL 的正则表达式 但它令人窒息 因为显然 URL 中存在为正则表达式保留的字符 需要转义 Boost 库中是否有任何函数或方法可以转义此类用途的字符
  • 如何转义字符串以在 Boost Regex 中使用

    我刚刚开始了解正则表达式 并且正在使用 Boost Regex 库 我需要使用包含特定 URL 的正则表达式 但它令人窒息 因为显然 URL 中存在为正则表达式保留的字符 需要转义 Boost 库中是否有任何函数或方法可以转义此类用途的字符
  • 如何限制对 MySQL 中用户定义函数的访问

    我是 MySQL 新手 我在我的一台服务器上运行了 Nessus 扫描 并遇到了一个安全发现 其中有一个解决方法来限制对用户定义函数的访问 有人能帮助我吗 Update 解决方法是限制访问以在服务器上创建用户定义的函数 这应该有效 你可以在
  • 如何限制对 MySQL 中用户定义函数的访问

    我是 MySQL 新手 我在我的一台服务器上运行了 Nessus 扫描 并遇到了一个安全发现 其中有一个解决方法来限制对用户定义函数的访问 有人能帮助我吗 Update 解决方法是限制访问以在服务器上创建用户定义的函数 这应该有效 你可以在
  • 如何将微秒转换为时间戳?

    我从未加密的 DAT 文件中获取了这段内容 Code 00 e1 27 17 6f e6 69 c0 换算成十进制为 63 374 851 375 000 000 该数字的单位是微秒 而这个巨大的数字无法绕过 1st January 197
  • 如何将微秒转换为时间戳?

    我从未加密的 DAT 文件中获取了这段内容 Code 00 e1 27 17 6f e6 69 c0 换算成十进制为 63 374 851 375 000 000 该数字的单位是微秒 而这个巨大的数字无法绕过 1st January 197
  • jQPlot - 删除垂直网格线

    我使用 jqPlot 作为我的图表框架 并且我的应用程序中有许多图表 主要是折线图和堆积条形图 我现在要求仅在这些图表上显示水平网格线 并且在 jqPlot 中看不到任何选项来执行此操作 有一个showGridline选项 但这会完全禁用网
  • jQPlot - 删除垂直网格线

    我使用 jqPlot 作为我的图表框架 并且我的应用程序中有许多图表 主要是折线图和堆积条形图 我现在要求仅在这些图表上显示水平网格线 并且在 jqPlot 中看不到任何选项来执行此操作 有一个showGridline选项 但这会完全禁用网
  • XML解析:编码utf-8 & UTF-8

    我正在尝试解析其中的值 其xml编码是这样的 当我试图get response在 logcat 中抛出消息 如图所示 11 19 17 25 13 350 W System err 3360 This is not valid URL 11
  • XML解析:编码utf-8 & UTF-8

    我正在尝试解析其中的值 其xml编码是这样的 当我试图get response在 logcat 中抛出消息 如图所示 11 19 17 25 13 350 W System err 3360 This is not valid URL 11
  • Nodejs、expressjs - 如何提供延迟响应

    我正在构建一个网络服务 我使用nodejs phantomjs 和expressjs 我正在学习这三个 我想在处理完客户的查询后向客户提供延迟响应 例如 我正在处理来自客户端的某些输入 然后 我想在后端处理数据 这平均需要大约 10 秒 然