Как отделить метод от маршрута - PullRequest
0 голосов
/ 15 октября 2019

У меня был этот маршрут, и он отлично работал

router.get('/api/User/:id',async(req,res)=>{
  try {
    const{id}=req.params;
    let result =await pool1.request()
      .input('Iduser', sql.Int, id)
      .execute('GetUser')
      res.json(result);
  } 
    catch (err) {
      res.json({ error: 'Does Not exist' })
    }
});

Но я хочу отделить функцию и оставить маршрут как можно более чистым, попробуйте разделить его следующим образом, но я получаю следующую ошибку: TypeError: человек не является функцией

Маршрут

router.get('/api/User/:id', async(req,res)=>{
    try {
        res.json((await one(req.params.id))[0]);
    } catch (err) {
        console.log(err);
        res.sendStatus(500);
    }
})

Функция

const one = async(id)=>{
    return new Promise((resolve,reject)=>{
    pool.request()
      .input('Iduser', sql.Int, id)
      .execute('User')((err,results) =>{
          if(err){
              return reject(err);
          }
          resolve(results);
      });

    });
}

В чем моя ошибка, я неправильно называю функцию?

Ответы [ 2 ]

0 голосов
/ 15 октября 2019

Спасибо, приятель, я решил, почему он говорит мне, что это была не функция, я плохо ее вызывал, но, как ты объяснишь, маршрут намного чище

функция

const one = async(id)=>{
    return new Promise((resolve,reject)=>{
         pool.request()
        .input('IdUser', sql.Int, id)
        .execute('GetUser',(err,results)=>{
            if(err){
                return reject(err);
            }
                resolve(results);
        }
        )    
    });
}

маршрут

router.get('api/user/:id', async(req,res)=>{
    try {
        let result=await m.one(req.params.id);
        res.json(result);
    } catch (error) {
        console.log(error);
        res.sendStatus(500);
    }
})
0 голосов
/ 15 октября 2019

чтобы сделать ваш код чище, вы можете сделать это:

const getUserById =async(req,res)=>{
      try {
        const{id}=req.params;
        let result =await pool1.request()
          .input('Iduser', sql.Int, id)
          .execute('GetUser')
          res.json(result);
      } 
        catch (err) {
          res.json({ error: 'Does Not exist' })
        }
    }
    router.get('/api/User/:id',getUserById);

также чтобы сделать его чище, вы можете сделать это следующим образом

export const asyncHandler = (fn) => async (request, response, next) => {
  try {
    return await fn(request, response, next);
  } catch (error) {
    return next(error); // or response.json({ error: 'Does Not exist' })

  }
};

 const getUserById =async(req,res)=>{
            const { params: { id } }=req;
            const result =await pool1.request()
              .input('Iduser', sql.Int, id).execute('GetUser');
            return  res.json(result);
        }


        router.get('/api/User/:id',asyncHandler(getUserById));
...