我正在构建中间件服务。调用时,它将为JSON对象提供某些信息。我需要抓取特定对象并将其传递给新的POST请求。但是,我正在努力抓住它,因为它不在范围之内,而且我觉得我很困惑。下面的例子;
var createStory = {
url: url,
headers: {
'Content-Type': 'application/json',
'Token': Token
},
body: {
current_state: req.body.data.item.user.name,
name: 'API testing posts',
description: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam et dui a nisi molestie vestibulum non id ante. Sed aliquet neque augue, a vestibulum lectus euismod et. Maecenas porta justo quis maximus tempor. Sed ante libero, posuere vitae efficitur sit amet, feugiat at dolor.',
story_type: 'bug',
label_ids: [20949434]
},
json: true
};
app.post('/api/something', function (req, res) {
if (req.body.data.item.conversation_parts.conversation_parts[0].body === 'match'){
request.post(createStory, function (error, response, body) {
console.log('error:', error);
console.log('statusCode:', response && response.statusCode);
console.log('body:', body);
});
res.sendStatus(200);
};
res.sendStatus(200);
});
current_state: req.body.data.item.user.name,
是我要在这里使用的-我试图从收到的JSON对象中提取用户名,并将其转发到current state
键值对中。
if
语句在范围内起作用。
我希望这有意义吗?
答案 0 :(得分:0)
您不清楚您的问题在何处以及如何使用和处理“ createStory”变量。您是否希望在整个应用程序中或仅在您提到的此路由器中访问带有用户凭据的req.body?您声称“ createStory”是中间件,但事实并非如此,它只是一个挂在其他地方的变量。
您不能在路由器功能之外使用“ req”。
如果我(认为)我了解您的目标(仍然不清楚),那么您有3个选择。您可以将凭据附加到您的应用中,以便在任何地方都可以访问(请记住,在不适用的地方,请定义为undefined),例如:
app.post('*',(req,res,next)=>{
req.service={'foo':req.body}
req.body.data.item.user.name=req.user.name
return next()
})
现在它在所有路由器中都可用,仅在任何路由器中都需要req.service或req.user.name。请记住,与护照(可能会使用)冲突,因为它使用了req.user变量。
OR
您可以手动将带有此参数的中间件功能添加到所需的任何路由器,如下所示:
app.post('/api/something', middleware, (req,res)=>{
//middleware is executed, do your job
})
function middleware(req,res,next){
if (req.body.data.item.user.name){
return next();
} else {res.send('no user in request')}
}
OR
只需将“ createStory”放在这样的路由器中
app.post('/api/something', function (req, res) {
var createStory = {'foo':{'bar':{'data':req.body.data}}}
if(createStory.foo.bar.data){
//do your job}
})
希望有帮助。