【问题标题】:Nods.js router throws "SyntaxError: await is only valid in async function"Node.js 路由器抛出“语法错误:等待仅在异步函数中有效”
【发布时间】:2020-08-26 20:12:35
【问题描述】:

我有一个分离路由器和控制器的 Nodejs 结构。

我尝试在控制器内部使用 Async-Await,但我得到了SyntaxError: await is only valid in async function

我的语法错了吗?

为什么我会收到 SyntaxError: await is only valid in async function 表示等待?

路线

const express = require('express');
const router = express.Router();

const authController = require('../controller/auth_controller');

router.post('/login', authController.login);

module.exports = router;

控制器

const jwt = require('jsonwebtoken');
const crypto = require('crypto');
const User = require('../model/index');

const { jwtSign } = require('../mixin/jwt');

exports.login = async (req, res, next) => {
  const { email, password } = req.body;
  const secretKey = req.app.get('jwt-secret');

  let sql = `SELECT * FROM user WHERE email = ?`;

  try {
    User.query(sql, [email], (err, result) => {
      ...
      else {
        const token = await jwtSign(secretKey, result[0].userId, email);
      ...
      }
    });
  } catch (error) {
    console.log(error);
  }
};

mixin/jwtSign

const jwt = require('jsonwebtoken');

exports.jwtSign = async (secretKey, userId, email) => {
  const token = jwt.sign(
    {
      userId: userId,
      email: email
    },
    secretKey
  );

  return token;
};

【问题讨论】:

标签: mysql node.js async-await


【解决方案1】:

你必须替换:

User.query(sql, [email], (err, result) => {

与:

User.query(sql, [email], async (err, result) => {

使其成为async 函数。

【讨论】:

    猜你喜欢
    • 2021-04-28
    • 1970-01-01
    • 1970-01-01
    • 2021-01-14
    • 1970-01-01
    • 2021-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多