小编use*_*989的帖子

React formik 表单验证:如何最初禁用提交按钮

下面是我使用的React表单验证代码formik。默认情况下,当表单加载时,我想禁用提交按钮:

import { useFormik } from "formik";
import * as Yup from "yup";

const formik = useFormik({
    initialValues: {
      firstName: "",
      lastName: "",
      email: ""
    },
    validationSchema: Yup.object({
      firstName: Yup.string()
        .max(15, "Must be 15 characters or less")
        .min(3, "Must be at least 3 characters")
        .required("Required"),
      lastName: Yup.string()
        .min(3, "Must be at least 3 characters")
        .max(20, "Must be 20 characters or less")
        .required("Required"),
      email: Yup.string()
        .email("Invalid email address")
        .required("Required")
    }),
    onSubmit: values => {
      handleSubmit(values);
    }
  }); …
Run Code Online (Sandbox Code Playgroud)

validation reactjs yup formik

29
推荐指数
3
解决办法
3万
查看次数

一次删除多个文档mongodb图集

我只在 Mongodb 云数据库(Atlas)中一次删除一条记录。我有 60 条记录要删除,这很痛苦。我没有看到一次删除多个记录的明显方法。有没有一种简单的方法可以做到这一点?

mongodb mongodb-atlas

9
推荐指数
1
解决办法
1万
查看次数

使用外部 Node.js API 进行下一步身份验证

我正在使用 Next Auth 并运行一个独立的 Node.js API。我正在使用使用凭证的 Next Auth 并使用 axios 将用户名和密码发送到 API。

在 API 方面,如果用户名和密码正确,我将使用 express-session 设置会话并将其保存到数据库中。

如果 Next.js 中的响应状态为 201,我想将 API 中的快速会话令牌添加到我的 Next.js 会话中。

下面的代码正在工作,我进行身份验证,当我在受保护的页面中进行 console.log 会话时,我看到在服务器上设置的快速会话令牌。该令牌也存储在 mongoDB 中。但这是正确的吗?这样做的目的只是为了保护前端的路由,即:检查 Next.js 中是否有会话

如果在受保护的页面上我需要发出 API 请求,我是否会根据登录用户的数据库令牌检查该会话令牌?

最后,JWT 在这里适合什么,这是 Next.js 使用 JWT 处理客户端身份验证会话的方式吗?

    import NextAuth from "next-auth";
    import CredentialsProvider from "next-auth/providers/credentials";
    import axios from "axios";
    export default NextAuth({
      session: {
        jwt: true,
        maxAge: 30 * 24 * 60 * 60,
      },
      providers: [
        CredentialsProvider({
          async authorize(credentials) {
            try {
              const response = …
Run Code Online (Sandbox Code Playgroud)

next.js next-auth

7
推荐指数
1
解决办法
1万
查看次数

Next.js 使用 JWT 进行身份验证

我正在将一个项目从 React 转移到 Next.js 并且想知道相同的身份验证过程是否可以。基本上,用户输入他们的用户名和密码,然后通过 API (Node.js/Express) 对照数据库凭据进行检查。因此,我没有使用 Next.js 内部 api 功能,而是使用与我的 Next.js 项目完全分离的 API。

如果登录凭据正确,则会将 JWT 令牌发送回客户端。我想将其存储在本地存储中,然后重定向用户。任何未来的 http 请求都将在标头中发送令牌并通过 API 检查它是否有效。这样做可以吗?我问是因为我看到很多 Next.js auth 使用 cookie 或会话,但不知道这是否是我应该采用的“标准”方法。

node.js express reactjs server-side-rendering next.js

6
推荐指数
2
解决办法
4910
查看次数

设置状态时重新渲染过多 - useSWR

我正在使用useSWR来获取数据,然后使用这些数据,我想通过使用reduce 来获得总计。如果我 console.log 输出该值,它工作正常,但一旦我尝试使用该值设置状态,我就会收到“太可能重新渲染”消息。

import Admin from "../../../components/admin/Admin";
import { useRouter } from "next/router";
import styles from "../../../styles/Dashboard.module.css";
import { getSession, useSession } from "next-auth/client";
import { useState } from "react";

/* BOOTSTRAP */
import Col from "react-bootstrap/Col";
import Container from "react-bootstrap/Container";
import Row from "react-bootstrap/Row";
import Spinner from "react-bootstrap/Spinner";
import Table from "react-bootstrap/Table";

import useSWR from "swr";
import axios from "axios";

const General = () => {
  const [session, loading] = useSession();
  const [adults, setAdults] = useState(null); …
Run Code Online (Sandbox Code Playgroud)

reactjs next.js swr

6
推荐指数
3
解决办法
1万
查看次数

拖放后如何更新记录

我正在使用React-sortable-hoc来拖放和重新排序项目。当我这样做时,我想更新数据库(node.js 和 mongodb)。

首先,我将其更改为函数组件,这就是为什么我的语法看起来与示例有点不同。

const onSortEnd = ({ oldIndex, newIndex }) => {

    setItems((items) => arrayMove(items, oldIndex, newIndex));

    const newArray = arrayMove(items, oldIndex, newIndex);

    async function makePatchRequest() {
      const config = {
        method: "patch",
        url: "http://localhost:8000/api/admin/faq/order",
        headers: { Authorization: "Bearer " + auth.token },
        data: {
          order: newArray,
        },
      };

      let res = await axios(config, { order: newArray });

    }
    makePatchRequest();
  };
Run Code Online (Sandbox Code Playgroud)

我将新数组发送到后端,其中所有内容都按拖放后的顺序排列。问题是我真的不知道在后端如何处理它。我是否需要删除所有记录,然后循环数组并插入新记录?我最初想循环记录并更新它们,但它实际上没有做任何事情,可能是因为代码错误或者我的逻辑错误,因为它所做的只是用完全相同的数据覆盖,因为所有改变的是数组的顺序,而不是数组中的实际 id 或 _id。

exports.faqSort = async (req, res) => {
  const { order } = …
Run Code Online (Sandbox Code Playgroud)

mongoose mongodb node.js reactjs

5
推荐指数
1
解决办法
4074
查看次数

使用 .save() 与 findByIdAndUpdate() 从数组中删除项目

我正在使用.pull从 mongo db 中的数组中删除记录并且它工作正常,但是我在堆栈溢出的某处读到的评论(无法再次找到它来发布链接)困扰着我,因为它评论说它很糟糕使用.save而不是使用.findByIdAndUpdate.updateOne

我只是想知道这是准确的还是主观的。

这就是我目前的做法。我检查具有该 id 的产品是否确实存在,如果存在,我从数组中提取该记录。

exports.deleteImg = (req, res, next) => {
  const productId = req.params.productId;
  const imgId = req.params.imgId;
  Product.findById(productId)
    .then(product => {
      if (!product) {
        return res.status(500).json({ message: "Product not found" });
      } else {
        product.images.pull(imgId);
        product.save()
        .then(response => {
          return res.status(200).json( { message: 'Image deleted'} );
        })
      }
    })
    .catch(err => {
      console.log(err);
    });
};
Run Code Online (Sandbox Code Playgroud)

我认为他们所说的应该是做这样的事情(我在谷歌之后找到的一个例子)

users.findByIdAndUpdate(userID,
    {$pull: {friends: friend}},
    {safe: true, upsert: true},
    function(err, doc) { …
Run Code Online (Sandbox Code Playgroud)

mongoose node.js

3
推荐指数
1
解决办法
1080
查看次数

如何在Mac上使用MAMP禁用MySQL中的严格模式

我已经花了数小时试图弄清楚这一点,但是却被严重卡住了。我今天安装了最新版本的mysql,我的网站上的某些东西坏了。我认为这与严格的设置有关,例如IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

我试图禁用严格模式只是为了使我的网站正常工作,但这似乎是不可能的。我已经在终端尝试过了,但是没有运气。

sudo vim /etc/mysql/conf.d/disable_mysql_strict_mode.cnf


[mysqld] 
    sql_mode="IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" 
Run Code Online (Sandbox Code Playgroud)

我查看了所有可以找到的etc文件夹以及其他各种文件夹,但看不到任何类似于.cnf文件的内容。

我可以通过phpmyadmin临时执行此操作,但是如果我关闭MAMP或重新启动计算机,则由于更改不是永久性的,因此必须再次执行。

mysql phpmyadmin

2
推荐指数
1
解决办法
2001
查看次数

何时在异步中发送响应 await try catch 块

我看过 2 个不同的例子,想知道哪个是“正确的”,或者它是否没有太大区别。示例 1 在 try 内部发送响应,示例 2 在 try 块外部发送。

示例 1:

  try {
    await food.save();
    res.status(201).send(food);
  } catch (err) {
    res.status(500).send(err);
  }
Run Code Online (Sandbox Code Playgroud)

示例 2:

  try {
    await food.save();
  } catch (err) {
    res.status(500).send(err);
  }

  res.status(201).send(food);
Run Code Online (Sandbox Code Playgroud)

mongoose mongodb node.js

2
推荐指数
1
解决办法
78
查看次数

去掉数组中的字符

我使用第三方脚本上传文件,当我上传多个文件时,我得到这种格式的名称:

[{"file":"0:/gIpVCEAe4eiW.jpg"},{"file":"0:/5yA9n2IfNh65.jpg"}]
Run Code Online (Sandbox Code Playgroud)

我只想要实际的文件名.我希望我可以发布一些我尝试过的代码,但我想不出很多选择.我不能单独得到.split来做我想做的事.

javascript

1
推荐指数
1
解决办法
54
查看次数

使用聚合后无法调用 .save()

我必须使用聚合在对象数组中查找用户 ID,一旦获得它,我想用该 ID 更新文档。但是,当我尝试像使用后那样调用 .save() 时Product.findById(productId),我收到一个错误,该错误仅在我使用聚合时发生。

Product.save 不是一个函数

exports.putGift = (req, res, next) => {
  const productId = req.body.productId;
  const requestId = req.body.requestId;
  Product.aggregate([
    { $match: { _id: mongoose.Types.ObjectId(productId) } },
    { $unwind: "$requests" },
    { $match: { "requests._id": mongoose.Types.ObjectId(requestId) } },
    { $project: { "requests.userId": 1 } }
  ])
    .then(product => {
      const userId = product[0].requests.userId;
      product.winner = userId;
      product.status = "given";
      return product.save()
      .then(result => {
        console.log("success");
      });
    })
    .catch(err => {
      console.log(err);
    });
};
Run Code Online (Sandbox Code Playgroud)

mongoose mongodb node.js

1
推荐指数
1
解决办法
2344
查看次数

如何在react中显示来自node.js服务器的图像

我在 mongodb 中有一条记录,其中包含我想在前端显示的图像的文件名,即:react。图片名称在mongodb中为portraits.jpg。

首先,我应该将路径名也保存到 mongo 中还是只保存图像名称,即:/img/portraits.jpg vs portraits.jpg

其次,如何在 React 中显示图像?

我使用 axios 从数据库获取数据,然后将数据发送到另一个组件:

const { categories } = this.props;

{categories.map(category => (
  <Col md={6} className="mb-3" key={category._id}>
    <Figure className="cat-photo">
      <h1>{category.name}</h1>
      <img src={category.catimg} className="img-fluid" />
    </Figure>
  </Col>
))}
Run Code Online (Sandbox Code Playgroud)

当我在浏览器中查看源代码时,它正在查看,http://localhost:3000/img/portraits.jpg但 node.js 服务器正在端口 8000 上运行。所以,我猜测这就是为什么没有显示图像的原因,因为图像位于服务器上且无处可去在 React 文件结构中找到。

node.js reactjs

0
推荐指数
1
解决办法
8190
查看次数