Express / узел Конкретный JSON-объект (ы) в запрос POST - PullRequest
0 голосов
/ 03 февраля 2019

Я создаю службу промежуточного программного обеспечения.При вызове он предоставляет объекту 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 Ответ

0 голосов
/ 04 февраля 2019
  1. Вам не очень ясно, где и как используется и используется ваша переменная "createStory".Вы хотите, чтобы ваш req.body с учетными данными пользователя был доступен через ваше приложение или только через тот маршрутизатор, который вы упомянули?Вы утверждаете, что «createStory» является промежуточным программным обеспечением, но это не так, это просто переменная, висящая в другом месте.

  2. Вы не можете использовать «req» вне функции маршрутизатора.

Если я (думаю) понимаю вашу цель (что опять-таки не ясно), то у вас есть 3 варианта.Либо вы прикрепляете свои учетные данные к своему приложению, чтобы к ним обращались везде (имейте в виду, что они не определены), например:

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}

})

надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...