所以我正在使用Nodejs并有一条明确的路线,看起来像这样:
app.get('/approvedmr/:id', async (req, res) => {
try {
const projectid = parseInt(req.params.id, 10);
const apMR = await new MergeRequestApproval().getResponse(projectid, 'Any');
res.send(await new MergeRequestApproval().getHeader(apMR, 'Any'));
} catch {
res.sendStatus(404);
}
});
这是getResponse
函数:
async getResponse(id: number, approval: string) {
const axiosInstance = axios.create();
return await axiosInstance.get(`gitlaburl/api/v4/projects/${id}/merge_requests?approved_by_ids=${approval}&per_page=1`, defaultheader);
}
我已经省略了getResponse
中的某些部分,因为它们仅检查批准字符串是否包含某个字符串。
现在。在本地,一切正常,将我的dockerized版本部署到测试服务器后,这些ID即可使用[1; 99],如果该ID大于此值(例如100或330),则会返回如下错误:
这是错误。堆栈:
"Error: Request failed with status code 404\n
at createError (/node_modules/axios/lib/core/createError.js:16:15)\n
at settle (/node_modules/axios/lib/core/settle.js:17:12)\n
at IncomingMessage.handleStreamEnd (/node_modules/axios/lib/adapters/http.js:236:11)\n
at IncomingMessage.emit (events.js:205:15)\n
at endReadableNT (_stream_readable.js:1154:12)\n
at processTicksAndRejections (internal/process/task_queues.js:84:9)"
我最初使用的是axios.get
而不是axios.create().get
,但后来读到这可能会导致问题,但是没有。
任何想法将不胜感激!
谢谢!
答案 0 :(得分:1)
我本身无法确定问题。 MergeRequestApproval().getHeader
函数很可能引发了未解决的错误。另一个原因可能是您实际上没有ID高于99
的项目
但是我认为您可以重组部分代码。我将使用getResponse
来返回gitlab的Response(作为axios响应)并转发该响应,而不会在您的Express服务器中进行更改。
app.get('/approvedmr/:id', async (req, res) => {
const projectid = parseInt(req.params.id, 10);
const apMR = await new MergeRequestApproval().getResponse(projectid, 'Any');
res.json(apMR);
});
ApMR包含您的 HTTP请求的响应data and header。
请注意,为方便起见,我使用了res.json
。 res.send
很好,但不包括内容类型JSON
的响应标头。
如果要在没有找到项目的情况下显式返回404,则可以坚持使用axios's error response status。 例如
res.sendStatus(apMR.response.status);
将它们全部缝合在一起,您可以像下面这样构造端点:
app.get('/approvedmr/:id', async (req, res) => {
try {
const projectid = parseInt(req.params.id, 10);
const apMR = await new MergeRequestApproval().getResponse(projectid, 'Any');
res.json(apMR);
catch (e) {
if (e.response) {
res.sendStatus(apMR.response.status);
}
// You might want to extend your error handling here.
// what about service outage (of gitlabs API), network issues, invalide auth etc.
}
});