Express/node将特定的JSON对象管道传输到POST请求中



我正在构建一个中间件服务。当被调用时,它会为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语句在作用域内起作用。

我希望这有道理?

  1. 您不太清楚在哪里以及如何使用和处理您的"createStory"变量。你想让你的req.body和用户凭据通过你的应用程序访问,还是只在你提到的路由器中访问?您声称"createStory"是一个中间件,但事实并非如此,它只是一个挂在其他地方的变量。

  2. 您不能在路由器功能之外使用"req"。

如果我(认为)我理解你的目标(同样不清楚),你有三个选择。要么你将你的凭据附加到你的应用程序上,以便在任何地方都可以访问(请记住,在不适用的地方未定义),如下所示:

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即可。请记住,passportjs(如果您使用它)可能会发生冲突,因为它使用req.user变量。

您可以手动将带有此参数的中间件功能添加到您想要的任何路由器,如下所示:

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')}
}

只要把你的"createStory"放在你的路由器里,就像这个

app.post('/api/something', function (req, res) {
var createStory = {'foo':{'bar':{'data':req.body.data}}}
if(createStory.foo.bar.data){
//do your job}
})

希望能有所帮助。

相关内容

最新更新