无法从节点中的 Web api 调用返回响应
Failing to get a response back from a web api call in node
这个特殊的 Node 问题让我发疯了一个星期。
我必须在 csv 文件上传过程中创建一个摩擦层(一种询问用户是否确定的模式)。本质上,流程将是:
用户点击 'UPLOAD SPREAD SHEET' > 文件上传到 s3 > S3 returns 参考密钥 > 将参考密钥传递到微服务网络 api 进行评估 > if true => 询问用户“他们是否确定” > 如果用户确定继续上传 > 将引用密钥转发到另一个端点,相同的服务,以完成上传。 false return 将继续上传,没有模态。
这是一种愚蠢的基于产品的功能,可以提醒用户注意他们的电子表格中可能存在的重复条目,因为我们目前无法自行检测重复条目。
问题是,我无法从评价中得到 return 的回复以挽救我的生命。如果我 console.log 响应,我可以在 Node 的终端 window 中看到它,但网络选项卡中没有任何响应返回。我不确定这是不是因为它是一个文件上传,如果它是忙碌的男孩,如果它不是响应类型的正确语法但是无休止的谷歌搜索没有给我带来任何答案,如果有人对 Node 和 Express 更有经验,我会很高兴可以看看
router.post('/import/csv',
// a bunch of aws s3 stuff to upload the file and return the key
s3.upload(uploadParams, (err, data) => {
if (err) {
res.status(500).send({
error_message: 'Unable to upload csv. Please try again.',
error_data: err
});
} else if (data) {
// creating the key object to pass in
const defaultImportCheck = {
body: data.Key
};
// endpoint that will evaluate the s3 reference key
SvcWebApiClient.guestGroup.defaultImportCheck(defaultImportCheck)
.then((response) => {
if (response.status === 'success') {
// where the response should be. this works but doesn't actually send anything.
res.send(response);
} else {
const errorJson = {
message: response.message,
category: response.category,
trigger: response.trigger,
errors: response.errors
};
res.status(500).send(errorJson);
}
})
.catch((error) => {
res.status(500).send({
error_message: 'Unable to upload csv. Please try again.',
error_data: error
});
});
}
});
});
req.pipe(busboy);
}
);
知道了,对于最终遇到我这种问题的任何人。这是两个人所以系好安全带。
1) 反应端处理响应的动作函数没有将响应转换为json。显然,返回的是一个 "readable stream",然后应该将其转换为 json。它没有。
2) 响应本身也需要在 json 中。
所以来自动作函数:
export function csvUpload(file) {
do some stuff
return fetch(fetch some stuff) { with some parameters }
.then(some error stuff)
.then(response => response.response.json())
}
然后来自 post 请求:
if (response.status === "success") {
res.json({ valid: response.data, token: data.Key)};
}
这个returns一个对象,我需要返回给客户。希望这对其他人有帮助。
这个特殊的 Node 问题让我发疯了一个星期。
我必须在 csv 文件上传过程中创建一个摩擦层(一种询问用户是否确定的模式)。本质上,流程将是:
用户点击 'UPLOAD SPREAD SHEET' > 文件上传到 s3 > S3 returns 参考密钥 > 将参考密钥传递到微服务网络 api 进行评估 > if true => 询问用户“他们是否确定” > 如果用户确定继续上传 > 将引用密钥转发到另一个端点,相同的服务,以完成上传。 false return 将继续上传,没有模态。
这是一种愚蠢的基于产品的功能,可以提醒用户注意他们的电子表格中可能存在的重复条目,因为我们目前无法自行检测重复条目。
问题是,我无法从评价中得到 return 的回复以挽救我的生命。如果我 console.log 响应,我可以在 Node 的终端 window 中看到它,但网络选项卡中没有任何响应返回。我不确定这是不是因为它是一个文件上传,如果它是忙碌的男孩,如果它不是响应类型的正确语法但是无休止的谷歌搜索没有给我带来任何答案,如果有人对 Node 和 Express 更有经验,我会很高兴可以看看
router.post('/import/csv',
// a bunch of aws s3 stuff to upload the file and return the key
s3.upload(uploadParams, (err, data) => {
if (err) {
res.status(500).send({
error_message: 'Unable to upload csv. Please try again.',
error_data: err
});
} else if (data) {
// creating the key object to pass in
const defaultImportCheck = {
body: data.Key
};
// endpoint that will evaluate the s3 reference key
SvcWebApiClient.guestGroup.defaultImportCheck(defaultImportCheck)
.then((response) => {
if (response.status === 'success') {
// where the response should be. this works but doesn't actually send anything.
res.send(response);
} else {
const errorJson = {
message: response.message,
category: response.category,
trigger: response.trigger,
errors: response.errors
};
res.status(500).send(errorJson);
}
})
.catch((error) => {
res.status(500).send({
error_message: 'Unable to upload csv. Please try again.',
error_data: error
});
});
}
});
});
req.pipe(busboy);
}
);
知道了,对于最终遇到我这种问题的任何人。这是两个人所以系好安全带。
1) 反应端处理响应的动作函数没有将响应转换为json。显然,返回的是一个 "readable stream",然后应该将其转换为 json。它没有。
2) 响应本身也需要在 json 中。
所以来自动作函数:
export function csvUpload(file) {
do some stuff
return fetch(fetch some stuff) { with some parameters }
.then(some error stuff)
.then(response => response.response.json())
}
然后来自 post 请求:
if (response.status === "success") {
res.json({ valid: response.data, token: data.Key)};
}
这个returns一个对象,我需要返回给客户。希望这对其他人有帮助。