node.js - 如何防止 504 并获得客户端响应
问题描述
我在 AWS 上托管了一个无服务器节点。我正在从客户端发出请求,将一组对象插入到 postgres 数据库中。此请求有效负载具有 >10000 个对象。
我有这个错误 访问从源域的“endpoint/ModelSProductAttributesUploadExcelData”获取已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头。如果不透明的响应满足您的需求,请将请求的模式设置为“no-cors”以获取禁用 CORS 的资源。
基本上服务器在发送请求之前超时。我能做些什么来防止这种情况发生?
我的插入逻辑如下:
if (
data[0].hasOwnProperty("SFC") &&
data[0].hasOwnProperty("StyleDesc") &&
data[0].hasOwnProperty("FabricDesc") &&
data[0].hasOwnProperty("ColorDesc") &&
data[0].hasOwnProperty("EventDesc") &&
data[0].hasOwnProperty("DptDesc") &&
data[0].hasOwnProperty("SubDptDesc") &&
data[0].hasOwnProperty("ClassDesc") &&
data[0].hasOwnProperty("InCollection") &&
data[0].hasOwnProperty("Function")
) {
const altered = data.reduce(
(acc, item) =>
(({ SFC, ...rest }) =>
Object.entries(rest).reduce(
(result, [Attribute, Value]) => [
...result,
{ SFC, Attribute, Value, Username: username },
],
acc
))(item),
[]
);
let final_array = altered.filter(
(item) =>
item.Attribute !== "StyleDesc" &&
item.Attribute !== "FabricDesc" &&
item.Attribute !== "ColorDesc" &&
item.Attribute !== "EventDesc" &&
item.Attribute !== "DptDesc" &&
item.Attribute !== "SubDptDesc" &&
item.Attribute !== "SubDptDesc" &&
item.Attribute !== "ClassDesc" &&
item.Attribute !== "InCollection" &&
item.Attribute !== "Function"
);
let sfcs = _.uniqBy(final_array, "SFC").map((item) => item.SFC);
sfcs = sfcs.map((sfc) => `'${sfc}'`);
console.log(sfcs);
try {
const client = connection();
await client.connect();
let query1 = `DELETE from models."InputAttributes" where "SFC" in (${sfcs})`;
const result1 = await client.query(query1);
console.log(result1);
query2 = `INSERT into models."InputAttributes" ("SFC", "Attribute", "Value","Username","CreatedDate") VALUES`;
for (let i = 0; i < final_array.length; i++) {
if (i === final_array.length - 1) {
string = `('${final_array[i].SFC}','${final_array[i].Attribute}','${final_array[i].Value}','${final_array[i].Username}',CURRENT_TIMESTAMP)`;
} else {
string = `('${final_array[i].SFC}','${final_array[i].Attribute}','${final_array[i].Value}','${final_array[i].Username}',CURRENT_TIMESTAMP),`;
}
query2 += string;
}
const result2 = await client.query(query2);
if (result2) {
res.sendStatus(200);
}
} catch (error) {
res.sendStatus(500);
}
} else {
res.sendStatus(400);
}
解决方案
我认为错误不是因为请求超时,而是因为您没有在服务器中启用 CORS 策略。因此出现错误:被 CORS 策略阻止。
//enable cors
var cors = require('cors')
var app = express()
app.use(cors())
关于您问题的第二部分,无需等待即可发送请求,只需发送响应而不进行处理,如果这适用于您的情况。
//It would look something like this.
async (req, res)=>{
res.send(responseData)
// do the remaining processing here
}
推荐阅读
- python - KeyError reverse HashMap - Python 简单协作 KNN 模型
- android - 在 android 中使用 httpclient 升级到 TLSV1.0 或 1.1 到 TLSV1.2
- python - 如何将 xlsx 文件转换为给定文件夹的简单 xls
- sql - 重命名sql结果列的通用方法
- c - 如何在C中读取通过stdin传递的文件
- scala - Spark:从spark sql查询中提取表列表
- android - 下载文件 arm64-v8a Skobbler
- ios - React Native中的Dimension.get('window').width根据SplashScreen方向而不是当前方向?
- javascript - 使用节点 sqlite3 异步获取所有数据
- python - Django i18n 提供不完整的翻译