响应前 Strapi 关闭与主机的连接
Strapi closing connection to host before response
我有一个本地 Java 服务,它公开一个端点,根据请求的大小,响应有时可能需要 5 分钟以上。我想 "hide" 这个端点在 Strapi 后面,这样一个没有通过 Strapi 认证的用户就不能访问这个端点。我所做的是,在 Strapi 中创建了一个自定义路由,并为此路由创建了一个自定义控制器函数:
async optimizeRoute(ctx) {
try {
console.log(`${new Date()} - Optimize route started`)
const vehicles = ctx.request.body.vehicles.map(vehicle => {
return {
id: vehicle.id,
licenseplate: vehicle.licenseplate,
maxweight: vehicle.maxweight,
maxlength: vehicle.maxlength,
geojson: vehicle.geojson,
maxtime: moment(vehicle.endtime).diff(moment(vehicle.starttime), 'seconds') * 1.1
}
});
const orders = ctx.request.body.orders.map(order => {
return {
id: order.id,
weight: order.weight,
length: order.length,
geojson: order.geojson
}
});
console.log(`Using ${vehicles.length} vehicles, and ${orders.length} orders!`)
const response = await axios.post('http://127.0.0.1:9090/optimizeroutes',
{ vehicles: vehicles, orders: orders }, {timeout: 0}
);
return response.data;
} catch (error) {
ctx.throw(error.response.status, error.response);
}
}
但是当我这样做时会发生什么,Strapi 在响应 returned 之前 1-2 分钟后关闭与请求者的连接。
使用 Strapi Beta3.17.5。
我可以在任何地方配置或调试以等待 axios return 响应然后 return 对请求者的响应??
默认服务器超时值为2分钟,请查看图像以供参考。
所以在server.js
你可以通过回调函数增加这个超时值
因此代码如下所示
const strapi = require('strapi');
strapi(/* {...} */).start(()=>{
strapi.server.setTimeout(0);
});
将超时设置为 0 strapi 将永远等待,或者您可以以毫秒为单位增加值。
感谢@NS23 让我走上正轨,但我无法使用 server.js 启动我的服务器,并且控制台日志记录 strapi.server 返回未定义。
我所做的是在 Bootstrap.js 中访问 strapi.server,然后记录 strapi.server,可以看到超时从 120000 更改为 0
我有一个本地 Java 服务,它公开一个端点,根据请求的大小,响应有时可能需要 5 分钟以上。我想 "hide" 这个端点在 Strapi 后面,这样一个没有通过 Strapi 认证的用户就不能访问这个端点。我所做的是,在 Strapi 中创建了一个自定义路由,并为此路由创建了一个自定义控制器函数:
async optimizeRoute(ctx) {
try {
console.log(`${new Date()} - Optimize route started`)
const vehicles = ctx.request.body.vehicles.map(vehicle => {
return {
id: vehicle.id,
licenseplate: vehicle.licenseplate,
maxweight: vehicle.maxweight,
maxlength: vehicle.maxlength,
geojson: vehicle.geojson,
maxtime: moment(vehicle.endtime).diff(moment(vehicle.starttime), 'seconds') * 1.1
}
});
const orders = ctx.request.body.orders.map(order => {
return {
id: order.id,
weight: order.weight,
length: order.length,
geojson: order.geojson
}
});
console.log(`Using ${vehicles.length} vehicles, and ${orders.length} orders!`)
const response = await axios.post('http://127.0.0.1:9090/optimizeroutes',
{ vehicles: vehicles, orders: orders }, {timeout: 0}
);
return response.data;
} catch (error) {
ctx.throw(error.response.status, error.response);
}
}
但是当我这样做时会发生什么,Strapi 在响应 returned 之前 1-2 分钟后关闭与请求者的连接。 使用 Strapi Beta3.17.5。 我可以在任何地方配置或调试以等待 axios return 响应然后 return 对请求者的响应??
默认服务器超时值为2分钟,请查看图像以供参考。
所以在server.js
你可以通过回调函数增加这个超时值
因此代码如下所示
const strapi = require('strapi');
strapi(/* {...} */).start(()=>{
strapi.server.setTimeout(0);
});
将超时设置为 0 strapi 将永远等待,或者您可以以毫秒为单位增加值。
感谢@NS23 让我走上正轨,但我无法使用 server.js 启动我的服务器,并且控制台日志记录 strapi.server 返回未定义。
我所做的是在 Bootstrap.js 中访问 strapi.server,然后记录 strapi.server,可以看到超时从 120000 更改为 0