Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Express执行函数时重定向客户端_Javascript_Node.js_Express_Request - Fatal编程技术网

Javascript 使用Express执行函数时重定向客户端

Javascript 使用Express执行函数时重定向客户端,javascript,node.js,express,request,Javascript,Node.js,Express,Request,现在,我有一个通过表单发布到的快速路线,下面是一个截断的示例。初始表单位于iframe中,因此在我收到http://example.com/endpoint,我将一个响应发送回iframe,带有指向“签名”页面的链接,指向父帧 不幸的是,http://example.com/endpoint可能需要很长时间,这会导致iframe超时,并且永远不会收到响应。我想做的是立即将某种类型的响应发送回iframe,并将页面重定向到某种“加载页面”——这将在路由器等待来自的响应时显示http://examp

现在,我有一个通过表单发布到的快速路线,下面是一个截断的示例。初始表单位于iframe中,因此在我收到
http://example.com/endpoint
,我将一个响应发送回iframe,带有指向“签名”页面的链接,指向父帧

不幸的是,
http://example.com/endpoint
可能需要很长时间,这会导致iframe超时,并且永远不会收到响应。我想做的是立即将某种类型的响应发送回iframe,并将页面重定向到某种“加载页面”——这将在路由器等待来自
的响应时显示http://example.com/endpoint

我现在使用Express向用户提供包含iframe的页面–所有视图都在服务器端控制

我想知道是否有人能给我提供什么资源,或是什么东西能让我朝着正确的方向前进

router.post('/api/orders',函数(req,res){
变量顺序={
“模型”:req.body.model,
“选项”:选项数组
}
请寄({
网址:'http://example.com/endpoint,
主体:秩序,
json:true
},功能(错误、响应、正文){
如果(!error&&response.statusCode==200){
如果(!body.isCustom){
hellosign.embedded.getSignUrl(body.signatureId)
.然后(功能(响应){
var signatureUrl=response.embedded.sign\u url;
var resignatureurl=encodeURIComponent(signatureUrl);
res.send(“”);
})
.catch(函数(err){
控制台日志(err);
})
}否则{
res.send('您选择了自定义选项');
}
}
如果(错误| | response.statusCode==403){
res.json({
信息:“您的订单出现问题”,
错误代码:response.statusCode,
errorMessage:body.message
});
}
});
});

我会将hellosign/任何长时间运行的API调用放在它自己的模块中。单独测试以确保其工作正常

然后您的iframe或其他(您真的需要iframe吗?)发送请求,该请求只是一个“开始订单”请求,它从hellosign模块获取订单id。然后使用setInterval或其他方法检查作为“orderstatus”端点的新端点

orderstatus端点访问新的hellosign模块以检查订单的状态

所以可能是这样的:

post('/start', function(req,res) {
  var id = hellosign.startorder(req.body.model);
  res.send(id);
});

get('/status', function(req,res) {
  res.send(hellosign.checkstatus(req.body.id));
}


// hellosign.js

var status = {};
exports.startorder = function(model) {
  var id = uuid.v4(); // some unique id;
  status[id] = 'started';
  request.post(api, /* ... */ ).then(function(signurl) { status[id] = signurl });
  return id;
}

exports.checkstatus = function(id) {
  return status[id];
}

我会将hellosign/任何长时间运行的API调用放在它自己的模块中。单独测试以确保其工作正常

然后您的iframe或其他(您真的需要iframe吗?)发送请求,该请求只是一个“开始订单”请求,它从hellosign模块获取订单id。然后使用setInterval或其他方法检查作为“orderstatus”端点的新端点

orderstatus端点访问新的hellosign模块以检查订单的状态

所以可能是这样的:

post('/start', function(req,res) {
  var id = hellosign.startorder(req.body.model);
  res.send(id);
});

get('/status', function(req,res) {
  res.send(hellosign.checkstatus(req.body.id));
}


// hellosign.js

var status = {};
exports.startorder = function(model) {
  var id = uuid.v4(); // some unique id;
  status[id] = 'started';
  request.post(api, /* ... */ ).then(function(signurl) { status[id] = signurl });
  return id;
}

exports.checkstatus = function(id) {
  return status[id];
}

听起来您需要一个作业队列,用户可以查询或轮询作业状态,并在完成时重定向到结果。听起来您需要一个作业队列,用户可以查询或轮询作业状态,并在完成时重定向到结果。差不多