Node.js Can';t在快速路由器内返回请求
我在后端安装了一个express router,我想用它将一些信息返回到前端,但我正在尝试将其分离为单独的功能,以便可以重复使用某些功能 当我在我的路由器功能中发出请求时,它的行为与预期的一样,但是当我中断它时,它总是返回为未定义,这使我认为我没有正确返回它 以下工作正常,并返回我尝试获取的项目链接: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
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
}