我正在构建快速中间件,以对数据库进行两次异步调用,以检查用户名或电子邮件是否已在使用中。这些函数返回的承诺没有捕获,因为我希望将数据库逻辑与 req/res/next 逻辑分开,并且我有集中的错误处理,需要next
作为参数。在我对本地环境的邮递员测试中,以下代码按预期工作,并且我的集中式错误处理程序将错误返回给客户端:
async checkUsernameExists(username) {
await this.sequelize.transaction(
async () =>
await this.User.findOne({
where: {
username,
},
}).then(user => {
if (user) throw new Conflict('Failed. Username already in use.');
}),
);
}
const checkDuplicateUsernameOrEmail = async (
{ body: { email, username } },
res,
next,
) => {
await Promise.all([
checkUsernameExists(username),
checkEmailExists(email),
])
.then(() => next())
.catch(error => next(error));
};
Run Code Online (Sandbox Code Playgroud)
然而,由于这些checkExists
函数是异步的,它们不应该包含在Promise.all
await中吗?或者Promise.all
自动执行此操作?
await Promise.all([
await checkUsernameExists(username),
await checkEmailExists(email),
])...
Run Code Online (Sandbox Code Playgroud)
这会导致 checkUsernameExists 拒绝未处理的承诺,并且不会向客户端发送任何响应。
这里是 Webpack 新手,webpack cli 告诉我我需要为加密提供别名,因为 webpack 不再包含默认节点库。现在我收到此错误,其他答案并没有太大帮助。crypto-browserify
正在尝试访问process.browser
. 任何人都可以透露更多信息吗?cli 也告诉我要安装,stream-browserify
所以我做了。
React v17、Babel 7.12.9、webpack 5.6.0
webpack.common.js
const paths = require('./paths');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const CopyWebpackPlugin = require('copy-webpack-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const dotenv = require('dotenv-webpack');
module.exports = {
entry: [paths.src + '/index.js'],
output: {
path: paths.build,
filename: '[name].bundle.js',
publicPath: '/',
},
plugins: [
new dotenv(),
new CleanWebpackPlugin(),
new CopyWebpackPlugin({
patterns: [
{
from: paths.public,
to: 'assets',
globOptions: {
ignore: ['*.DS_Store'],
},
},
], …
Run Code Online (Sandbox Code Playgroud)