如何从 Node Js 获取 azure DevOps 工作项详细信息

问题描述 投票:0回答:1

我有一个 Node JS 应用程序,用于创建和获取 azure DevOps 票证。因此,创建方法工作正常,并且在 DevOps 中创建了票证,但当尝试获取票证详细信息时,它显示错误。 我的获取方法如下,我在其中传递工作项的标题并尝试从 Azure DevOps 检索所有详细信息。

async function getWorkItemIdByTitle(workItemTitle) {
    let status = "";
    console.log("getting work item ID")
    console.log(workItemTitle);
    try {
        // Encode the title for the URL
        const encodedTitle = encodeURIComponent(workItemTitle);

        // Construct the query URL to search for work items by title
        const url = `${orgUrl}/${projectNameForURL}/_apis/wit/wiql?api-version=7.1`;

        // WIQL (Work Item Query Language) query to search for work items by title
        const wiqlQuery = `SELECT [System.Id] FROM WorkItems WHERE [System.Title] = '${encodedTitle}'`;

        const response = await axios.post(url, { query: wiqlQuery }, {
            headers: {
                'Content-Type': 'application/json-patch+json',
                'Authorization': `Basic ${Buffer.from(`:${pat}`).toString('base64')}`,
            },
        });

        // Check if any work items were found
        if (response.data.workItems.length > 0) {
            const workItemId = response.data.workItems[0].id;
            console.log(`Work item ID for title '${workItemTitle}': ${workItemId}`);
            status = "Incident Number: " + workItemId;
        } else {
            console.log(`No work item found with title '${workItemTitle}'`);
            status = "No matching incidents found"
        }
    } catch (error) {
        console.error('Error retrieving work item by title:', error.response ? error.response.data : error.message);
        status = "Error fetching incidents";
    }
    console.log("STATUS: ", status);
    return status;
}

我收到的错误如下:

我是新手,任何帮助将不胜感激。

javascript node.js azure-devops axios azure-devops-rest-api
1个回答
0
投票

TF400898
错误是由您为标题设置的“
Content-Type
”错误引起的。正确的 '
Content-Type
' 应该是 '
application/json
' 而不是 '
application/json-patch+json
'。

headers: {
    'Content-Type': 'application/json',
    'Authorization': `Basic ${Buffer.from(`:${pat}`).toString('base64')}`,
}

此外,您不应该对传递到函数中的工作项标题进行编码,这会让 WIQL 无法获取正确的标题并导致找不到工作项。

const wiqlQuery = `SELECT [System.Id] FROM WorkItems WHERE [System.Title] = '${workItemTitle}'`;
© www.soinside.com 2019 - 2024. All rights reserved.