我正在使用express在node.js服务器上工作。我这样处理POST
请求:
app.post('/signup', async (req, res) => {
let user = {
email: req.body.userEmail,
pass: req.body.userPass
}
try {
let insertedUser = await User.create(user)
console.log(insertedUser.get('email'))
} catch (err) {
console.log(`ERROR! => ${err.message}`)
}
})
要使其正常工作,我必须将async
放在回调函数之前。但是,如果app.post()
已经是异步函数,为什么还要这样做呢?
我可以使用异步/等待吗?
答案 0 :(得分:1)
此import itertools
# to make groupby work
a.sort()
for key,items in itertools.groupby(a):
how_much = len(list(items))
if how_much > 1:
print(key, "num", how_much)
与async/await
异步无关,因为异步/等待是ES5 +引入的功能,用于以同步方式处理函数中的异步调用。可以将其视为Promises的扩展版本,就像“同步”一样,但功能相同。因此,您的代码对我来说看起来是正确的。
答案 1 :(得分:1)
您工作正常(除了您没有使用res
来响应请求之外)。
您需要使用async
的原因是app.post()
的签名是
app.post(path: string, handler: (req: Request, res: Response) => void): void
,即两个参数,一个是一个路径,它是一个字符串,一个处理程序,它是一个接受两个参数的函数(它接受更多的参数,但是为了简单起见,我们现在忽略它们),什么都不返回。
如您所见,app.post()
本身没有有趣的返回值(尤其是它不会返回Promise),因此它本身并不是异步函数。
您正在传递一个函数,该函数描述当请求到达路径时(您的情况为'/signup'
)要执行的操作。由于您要在该功能中使用异步功能(也称为await
),因此必须将该功能标记为async
。
TL; DR-您的处理函数是异步的,app.post()
不是。