API 已解决但未发送 /api/users/create 的响应,这可能会导致请求停滞。下一个
API resolved without sending a response for /api/users/create, this may result in stalled requests. NEXTJS
我在我的 Next.js 应用程序中创建了一个 API 端点来处理用户帐户创建,并且我正在使用 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);
}
}
在 if
语句的 else
块中必须调用 res.end()
。
} else {
res.status(500)
res.end()
}
为了使 API 响应更清晰,请考虑在这种情况下使用 405 状态代码而不是 500。 405 表示方法不被允许(参见 here)。
实际上 bcrypt hash 函数是一个异步函数,它 returns 承诺要么用加密数据盐解决,要么用错误拒绝。
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();
}
}
只需确保它是一个异步函数并且添加:
res.status(200) // for success
res.status(500) // enter code here`for failed
我在我的 Next.js 应用程序中创建了一个 API 端点来处理用户帐户创建,并且我正在使用 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);
}
}
在 if
语句的 else
块中必须调用 res.end()
。
} else {
res.status(500)
res.end()
}
为了使 API 响应更清晰,请考虑在这种情况下使用 405 状态代码而不是 500。 405 表示方法不被允许(参见 here)。
实际上 bcrypt hash 函数是一个异步函数,它 returns 承诺要么用加密数据盐解决,要么用错误拒绝。
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();
}
}
只需确保它是一个异步函数并且添加:
res.status(200) // for success
res.status(500) // enter code here`for failed