Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Can';t在快速路由器内返回请求_Node.js_Reactjs_Express_Request - Fatal编程技术网

Node.js Can';t在快速路由器内返回请求

Node.js Can';t在快速路由器内返回请求,node.js,reactjs,express,request,Node.js,Reactjs,Express,Request,我在后端安装了一个express router,我想用它将一些信息返回到前端,但我正在尝试将其分离为单独的功能,以便可以重复使用某些功能 当我在我的路由器功能中发出请求时,它的行为与预期的一样,但是当我中断它时,它总是返回为未定义,这使我认为我没有正确返回它 以下工作正常,并返回我尝试获取的项目链接: router.get('/test', (req, res) => { var options = { method: 'GET', url: ur

我在后端安装了一个express router,我想用它将一些信息返回到前端,但我正在尝试将其分离为单独的功能,以便可以重复使用某些功能

当我在我的路由器功能中发出请求时,它的行为与预期的一样,但是当我中断它时,它总是返回为未定义,这使我认为我没有正确返回它

以下工作正常,并返回我尝试获取的项目链接:

router.get('/test', (req, res) => {

    var options = {
        method: 'GET',
        url: url + '/api/projects',
        headers:
        {
            Cookie: req.params.token
        },
        qs: 
        {
            limit: '1000',
            q: `name:${req.params.project_name}` 
        }
    };

    request(options, (error, response, body) => {
        if (error) {
             throw new Error(error);
        }

        const jsonBody = JSON.parse(body);

        const projectLink = jsonBody.items[0]['_meta']['href']

        console.log(projectLink)

        return res.send({ "project_link": projectLink })
    });
})
但是,当我尝试将上述请求分解为它自己的函数并从router.get('/test')调用它时,它返回为未定义,但它将预期值记录在test()中:

我怀疑发生了一点请求初始化,这使事情变得复杂,因为请求是从前端发出的,前端正在调用一个返回请求的函数。
返回projectLink的正确方法是什么?

这是一个异步调用,因此您应该使用promise或async await,以便它仅在返回值时进行。否则它将开始执行下一行,而不是等待

const rp = require("request-promise");
router.get('/test', async (req, res) => {
    let projectId;
    projectId = await test(req.query.bearer_token, req.query.project_name);

    console.log('projID', projectId);
    return res.send(projectId)
})

let test = async (token, project_name) => {

    var options = {
        method: 'GET',
        uri: url + '/api/projects',
        headers: {
            Cookie: token
        },
        qs: {
            limit: '1000',
            q: `name:${project_name}`
        },
        json: true
    };

    const body = await rp(options)
    if (!body) {
        throw "api response ..........."
    }

    const jsonBody = JSON.parse(body);

    const projectLink = jsonBody.items[0]['_meta']['href']

    console.log(projectLink)

    return projectLink
}

这是一个异步调用,因此您应该使用promise或async await,以便它仅在返回值时进行。否则它将开始执行下一行,而不是等待

const rp = require("request-promise");
router.get('/test', async (req, res) => {
    let projectId;
    projectId = await test(req.query.bearer_token, req.query.project_name);

    console.log('projID', projectId);
    return res.send(projectId)
})

let test = async (token, project_name) => {

    var options = {
        method: 'GET',
        uri: url + '/api/projects',
        headers: {
            Cookie: token
        },
        qs: {
            limit: '1000',
            q: `name:${project_name}`
        },
        json: true
    };

    const body = await rp(options)
    if (!body) {
        throw "api response ..........."
    }

    const jsonBody = JSON.parse(body);

    const projectLink = jsonBody.items[0]['_meta']['href']

    console.log(projectLink)

    return projectLink
}