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