NodeJS 对未存储在模型数据库中的变量作出React

xcitsw88  于 2023-06-29  发布在  Node.js
关注(0)|答案(1)|浏览(74)

在我的React项目。我需要在前端发布的数据有4个值。两个值是输入类型,没有问题,在存储,下一个值是从本地存储userID派生的变量,在用户我采取的用户名和存储在setusername。但发布后,除了用户名的数据所有值存储。现在我需要存储在它的用户名。和图像也不存储在数据库中
后图式

const postSchema = new mongoose.Schema({
  user: { type: String,ref: 'Users'},
  title: {type: String,required: true},
  description: {type: String,required: true },
  image: {type: String },
  likes: [{type: mongoose.Schema.Types.ObjectId,ref: 'Users' }],
  comments: [
    {
      user: {type: mongoose.Schema.Types.ObjectId,ref: 'Users',required: true},
      text: {type: String,required: true},
      createdAt: { type: Date, default: Date.now}
    }
  ],
  createdAt: { type: Date,default: Date.now}
});

邮路

router.post('/', async (req, res) => {
  try {
    const { title, description, image, username } = req.body;

    const post = new PostModel({
      user: username,
      title,
      description,
      image
    });

    const savedPost = await post.save();
    res.json(savedPost);
  } catch (err) {
    res.status(400).json({ error: 'Failed to create post' });
  }
});

这是文章页

const [title, setTitle] = useState('');
  const [description, setDescription] = useState('');
  const userID = localStorage.getItem('userID');
  const [username, setUsername] = useState({});
  const [image, setImage] = useState(null);

  useEffect(() => {
    const fetchUserInfo = async () => {
      try {
        const response = await axios.get(`http://localhost:3001/auth/${userID}`);
        const user = response.data;
        setUsername(user.username);
      } catch (error) {
        console.error('Error fetching user information:', error);
      }
    };

    fetchUserInfo();
  }, [userID]);

  const handleSubmit = async (event) => {
    event.preventDefault();

    try {
      await axios.post('http://localhost:3001/posts', {
        user: username,
        title,
        description,
        image
      });
      setTitle('');
      setDescription('');

      console.log('Post submitted successfully!');
    } catch (error) {
      console.error('Error submitting post:', error);
    }
  };
 const handleImageChange = (event) => {
    const selectedImage = event.target.files[0];
    setImage(selectedImage);
  };
 return (
    <div>
      <h1>Post Your Recipe</h1>
      <form onSubmit={handleSubmit}>
        <label htmlFor="title">Title:</label>
        <input
          type="text"
          id="title"
          value={title}
          onChange={(event) => setTitle(event.target.value)}
        />

        <label htmlFor="description">Description:</label>
        <textarea
          id="description"
          value={description}
          onChange={(event) => setDescription(event.target.value)}
        ></textarea>
         <label htmlFor="image">Image:</label>
        <input type="file" id="image" onChange={handleImageChange} />
        <button type="submit">Submit</button>
      </form>
    </div>
  );

用户名是在用户.用户名我需要存储这以及一起所有.在路由用户中:用户名如何存储在其中。图像和用户此字段未存储在数据库中。

mklgxw1f

mklgxw1f1#

你怎么把username当作空对象呢?我会设置一个空字符串。
我还没有得到任何设置,我猜在这里,但我可能会使用formData,尝试下面的代码,并在必要的地方更换。

const [title, setTitle] = useState('');
  const [description, setDescription] = useState('');
  const userID = localStorage.getItem('userID');
  const [username, setUsername] = useState('');
  const [image, setImage] = useState(null);

  useEffect(() => {
    const fetchUserInfo = async () => {
      try {
        const response = await axios.get(`http://localhost:3001/auth/${userID}`);
        const user = response.data;
        setUsername(user.username);
      } catch (error) {
        console.error('Error fetching user information:', error);
      }
    };

    fetchUserInfo();
  }, [userID]);

  const handleSubmit = async (event) => {
    event.preventDefault();

    try {
      const formData = new FormData();
      formData.append('user', username);
      formData.append('title', title);
      formData.append('description', description);
      formData.append('image', image);

      await axios.post('http://localhost:3001/posts', formData);
      setTitle('');
      setDescription('');
      setImage(null);

      console.log('Post submitted successfully!');
    } catch (error) {
      console.error('Error submitting post:', error);
    }
  };
  
 const handleImageChange = (event) => {
    const selectedImage = event.target.files[0];
    setImage(selectedImage);
  };
 return (
    <div>
      <h1>Post Your Recipe</h1>
      <form onSubmit={handleSubmit}>
        <label htmlFor="title">Title:</label>
        <input
          type="text"
          id="title"
          value={title}
          onChange={(event) => setTitle(event.target.value)}
        />

        <label htmlFor="description">Description:</label>
        <textarea
          id="description"
          value={description}
          onChange={(event) => setDescription(event.target.value)}
        ></textarea>
         <label htmlFor="image">Image:</label>
        <input type="file" id="image" onChange={handleImageChange} />
        <button type="submit">Submit</button>
      </form>
    </div>
  );

相关问题