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 - 如何提供延迟响应 的相关文章

  • 使用 GruntJs 缩小脚本

    我有几个 js 文件 我似乎可以让 GruntJs 正确地连接 缩小它们 如果我单独做每一个 它们就会工作得很好 如果我单独组合然后尝试缩小组合文件 它也不起作用 Here is the error 有想法该怎么解决这个吗 或者也许是什么原
  • VS Code,更改调试器的 NodeJS 版本

    我想将 VS Code 的 NodeJS 版本从 4 5 0 更改为 7 7 2 专门针对不同的项目 我在Mac上使用nvm 并且我有上面提到的两个版本 它们用于不同的项目 尽管我可以使用 nvm 从终端进行更改 但 VS Code 使用默
  • JSON e 和 JSON E

    在 JSON 网站上here http www json org 它解释了 JSON 对象 的不同可能性 然而 在数字部分 这些出现 e e e E E E 1 这些代表什么 在寻找答案的过程中
  • 使用 SVG 的部分边框/描边

    我正在使用 svg d3 创建由 矩形 元素组成的图表 为每个矩形添加部分边框 描边 仅在矩形顶部 的最佳方法是什么 Thanks 我不认为 SVG 支持仅描边矩形或路径的一部分 描边不像 CSS 边框 您还有其他一些选择 所有这些都需要一
  • node.js 本机插件 - 包装类的析构函数不运行

    我正在用 C 编写一个 Node js 插件 我使用 node ObjectWrap 包装一些类实例 以将本机实例与 JavaScript 对象关联起来 我的问题是 包装实例的析构函数永远不会运行 这是一个例子 point cc inclu
  • 使用 Javascript 进行 SVG 旋转

    我已经在 HTML 页面中创建了一个 SVG 图像 现在我想移动 SVG 形状以使用 JavaScript 按钮 我的应用程序的 JSFiddle 在这里 http jsfiddle net johndavies91 xwMYY http
  • 如何安装并开始使用 Vuetify 和 Vue.js 3

    我在哪里可以找到新的 Vuetify 版本与 Vue js 3 兼容的文档以及如何使用 Vue cli 安装和设置它 在 vue 2 中我们这样做 vue create project name then vue add vuetify 我
  • 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 我似乎可以将
  • 使用 Node JS child_process.spawn 运行脚本时打开文件过多

    设想 使用主脚本多次生成可变数量的子进程 以便对服务器执行负载测试 主脚本最初生成它可以生成的所有子进程 根据其配置设置 然后当子进程退出时 如果配置请求更多运行 则将启动新的子进程 我看到的是在尝试启动第 83 个子进程时立即失败 83
  • 如果按下警报,则转到“确定”按钮后的 URL

    我需要确保当用户在 JavaScript 警报窗口中单击 确定 时 浏览器会移动到不同的 URL 这可能吗 你是什 么意思 确保 alert message window location some url 在警报窗口中单击 确定 后重定向
  • 如何从 kue 中删除早于 x 的已完成作业

    我正在使用 kue for node js 并且我看到有用于完整删除作业的示例代码 但是有没有办法可以删除早于 X 的陈旧作业 我希望看到一两天内已完成的工作 以便我可以回顾正在发生的事情 但它可以清理任何比这更旧的东西 自从第一次提出这个
  • scrollIntoView 滚动得太远

    我有一个页面 其中包含从数据库动态生成的带有 div 的表行的滚动条 每个表格行的作用就像一个链接 有点像您在视频播放器旁边的 YouTube 播放列表中看到的那样 当用户访问该页面时 他们所在的选项应该位于滚动 div 的顶部 此功能正在
  • 不固定高度的滚动div

    我需要构建一个动态调整大小的滚动 div div 应动态调整大小以适应屏幕 但如果内容不适合屏幕 它应该显示一个滚动条 因此浏览器自己的滚动条永远不需要激活 我可以通过在 div 中放置另一个 div 并使用来让滚动条出现在 div 中ov
  • 在 JavaScript 中将数字转换为字符串,而不从数字中添加尾随零

    我尝试使用 toString 在 JavaScript 中将数字转换为字符串 但它会截断数字中无关紧要的零 举些例子 var n1 250 00 var n2 599 0 var n3 056 0 n1 toString yields 25
  • 如何在 JObject 中添加或更新 JProperty 值

    我目前正在使用以下扩展方法来执行此任务 但似乎应该有一些现有的包含方法或扩展来执行此任务 或至少是其中的一个子集 如果里面没有任何东西Json NET那么推荐的流程是什么 或者我如何更改下面的代码以更接近推荐的流程 public stati
  • JavaScript。如果数组包含重复数字,Array .sort() 方法会为 Chrome 和 Firefox 返回不同的结果

    我有包含随机数的数组 当我试图通过排序这个数组时 sort 方法 如果数组包含重复的数字 结果会不同 下面的代码在 Chrome 和 Firefox 中的工作方式有所不同 1 2 3 4 5 6 7 8 9 2 15 3 4 5 1 2 3
  • IOS - React Native - 未处理的 JS 异常:SyntaxError

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

    我在 javascript 中从 JSON 对象删除数据时遇到问题 我正在动态创建此 JSON 并且删除也将动态进行 下面是我的 JSON 和我所处的情况 brands 51 2046 53 67 64 现在 我必须从中删除 53 我正在使
  • 如何构建我的 PHP 项目?

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

随机推荐

  • 将具有外键的第三个表中的记录复制到其他表

    我有三个表 表 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 秒 然
  • Nodejs、expressjs - 如何提供延迟响应

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