【问题标题】:API resolved without sending a response for /api/users/create, this may result in stalled requests. NEXTJSAPI 在未发送 /api/users/create 响应的情况下解析,这可能会导致请求停止。下一个
【发布时间】:2020-11-30 00:05:05
【问题描述】:

我创建了一个 API 端点来处理我的 Next.js 应用程序中的用户帐户创建,并且我正在使用 knex.js 来处理我的查询,但我仍然收到此错误:

API resolved without sending a response for /api/users/create, this may result in stalled requests.

我的代码在/pages/api/users/create.js:

import { hash } from 'bcrypt';
import knex from '../../../knex';

export default async function regiterUser(req, res) {
  if (req.method === 'POST') {
    try {
      hash(req.body.password, 10, async function (_, hash) {
        await knex('users').insert({
          name: req.body.name,
          email: req.body.email,
          role: 'user',
          allowed: true,
          password: hash,
        });
        res.end();
      });
    } catch (err) {
      res.status(err).json({});
    }
  } else {
    res.status(405);
  }
}

【问题讨论】:

  • 您可以禁用警告(请参阅here)。
  • @NikolaiKiselev 实际上我在服务器上停止了请求,当应用程序持续运行一段时间时,我收到一条错误消息:客户端太多。来自同一个端点

标签: javascript node.js api next.js knex.js


【解决方案1】:

实际上 bcrypt hash 函数是一个异步函数,它返回一个承诺,要么使用加密数据 salt 解决,要么因错误而拒绝。

import knex from '../../../knex';

export default async function regiterUser(req, res) {
  if (req.method === 'POST') {
    try {
      const hashed = await hash(req.body.password, 10);
      await knex('users').insert({
        name: req.body.name,
        email: req.body.email,
        role: 'user',
        allowed: true,
        password: hashed,
      });
      res.status(200).end();
    } catch (err) {
      res.status(err).json({});
    }
  } else {
    res.status(405);
    res.end();
  }
}

【讨论】:

    【解决方案2】:

    if 语句的else 块中必须调用res.end()

    } else {
      res.status(500)
      res.end()
    }
    

    为了使 API 响应更清晰,请考虑在这种情况下使用 405 状态代码而不是 500。 405 表示方法不被允许(见here)。

    【讨论】:

      猜你喜欢
      • 2021-11-17
      • 1970-01-01
      • 2021-04-04
      • 1970-01-01
      • 2021-09-08
      • 2021-12-04
      • 2021-12-04
      • 2018-08-04
      • 2020-06-26
      相关资源
      最近更新 更多