如何使用自定义中间件将 "async" 添加到路由?
How to add "async" to a route with a custom middleware?
我需要在 Express 的路线中使用 await
,因此它必须是 async
。但是,当我尝试将 async
添加到路由时,它不起作用,因为我使用了中间件。
api.get('/users/yop', CORS(CORSOPT), async, checkauth, (req, res) => {
await GETDATA.getUsers(db.collection('users'));
res.json(users[req.user]);
})
中间件看起来像这样:
function checkauth(req, res, next) {
...
next();
}
如果 async
和 checkout
像我发布的代码一样用逗号分隔,我会收到此错误:
await is only valid in async function
如果它们没有用逗号分隔,我的代码编辑器会将其标记为语法错误:
如何解决这个问题?
您尝试的语法无效。 async
始终与函数定义一致。
api.get('/users/yop', CORS(CORSOPT), checkauth, async (req, res) => {
await GETDATA.getUsers(db.collection('users'));
res.json(users[req.user]);
})
应该可以。如果 checkauth
也包含 await
语句,则将 checkauth
的 定义 标记为异步。
您需要直接使用关键字将箭头函数声明为async。
api.get('/users/yop', CORS(CORSOPT), checkauth, async (req, res) => {
await GETDATA.getUsers(db.collection('users'));
res.json(users[req.user]);
});
将“异步”直接放在您传入的函数前面,而不是对其他函数的引用。如果那些需要异步,当它们自己定义这些函数时,它们可以有自己的声明。
api.get('/users/yop', CORS(CORSOPT), checkauth, async (req, res) => {
await GETDATA.getUsers(db.collection('users'));
res.json(users[req.user]);
})
您可以add async回调函数:
api.get('/users/yop', CORS(CORSOPT), checkauth, async (req, res) => {
await GETDATA.getUsers(db.collection('users'));
res.json(users[req.user]);
})
此外,如果您出于任何原因想要检查 return 一个承诺,这就是您放置异步的地方:
async function checkauth(req, res, next) {
...
next();
}
我需要在 Express 的路线中使用 await
,因此它必须是 async
。但是,当我尝试将 async
添加到路由时,它不起作用,因为我使用了中间件。
api.get('/users/yop', CORS(CORSOPT), async, checkauth, (req, res) => {
await GETDATA.getUsers(db.collection('users'));
res.json(users[req.user]);
})
中间件看起来像这样:
function checkauth(req, res, next) {
...
next();
}
如果 async
和 checkout
像我发布的代码一样用逗号分隔,我会收到此错误:
await is only valid in async function
如果它们没有用逗号分隔,我的代码编辑器会将其标记为语法错误:
如何解决这个问题?
您尝试的语法无效。 async
始终与函数定义一致。
api.get('/users/yop', CORS(CORSOPT), checkauth, async (req, res) => {
await GETDATA.getUsers(db.collection('users'));
res.json(users[req.user]);
})
应该可以。如果 checkauth
也包含 await
语句,则将 checkauth
的 定义 标记为异步。
您需要直接使用关键字将箭头函数声明为async。
api.get('/users/yop', CORS(CORSOPT), checkauth, async (req, res) => {
await GETDATA.getUsers(db.collection('users'));
res.json(users[req.user]);
});
将“异步”直接放在您传入的函数前面,而不是对其他函数的引用。如果那些需要异步,当它们自己定义这些函数时,它们可以有自己的声明。
api.get('/users/yop', CORS(CORSOPT), checkauth, async (req, res) => {
await GETDATA.getUsers(db.collection('users'));
res.json(users[req.user]);
})
您可以add async回调函数:
api.get('/users/yop', CORS(CORSOPT), checkauth, async (req, res) => {
await GETDATA.getUsers(db.collection('users'));
res.json(users[req.user]);
})
此外,如果您出于任何原因想要检查 return 一个承诺,这就是您放置异步的地方:
async function checkauth(req, res, next) {
...
next();
}