如何将方法与路线分开

问题描述 投票:0回答:2

我有这条路线,而且效果很好

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

    });
}

我的错是什么,我称这个函数错了吗?

node.js express asynchronous async-await
2个回答
0
投票

为了使代码更整洁,您可以执行此操作:

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));

0
投票

感谢队友,我解决了为什么他告诉我这不是一个函数,我没有很好地称呼它,但是您对它的解释方式更清晰了]]

功能

© www.soinside.com 2019 - 2024. All rights reserved.