Node.js 如何将方法与路由分离

Node.js 如何将方法与路由分离,node.js,express,asynchronous,async-await,Node.js,Express,Asynchronous,Async Await,我有这条路线,它运行得很好 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) { r

我有这条路线,它运行得很好

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:one不是函数

路线

作用

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

    });
}

我的错误是什么?我调用的函数是否错误?

要使代码更清晰,可以执行以下操作:

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

谢谢你,伙计,我解决了为什么他告诉我这不是一个函数,我没有很好地调用它,但你解释它的方式,路线更干净

作用

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