Как я могу передать переменную из моего поста в мой get?

#javascript #node.js #reactjs #axios

Вопрос:

Я использую react/express.

У меня есть простая веб-страница, которая принимает пользовательский ввод и сохраняет его в SQL с помощью axios.post . В моем бэкэнде мне нужно получить доступ к этой пользовательской переменной в моем get , чтобы я мог фильтровать то, что нужно отправить обратно пользователю.

Мне не удалось заставить функцию возврата работать, и я не хочу использовать глобальные переменные, так как это приводило к ошибкам раньше.

Я чего-то не понимаю? Как я могу получить доступ к переменной из моего get запроса из моего post запроса.

frontend.js

 import React from 'react';
import { useState, useEffect } from "react";
import Calendar from 'react-calendar';
//import 'react-calendar/dist/Calendar.css';
import Axios from 'axios'; 

const CalendarApp = () => {
  var [selectedDate, newDate] = useState(new Date());
  const [event, newEvent] = useState("")
  const [userEvent, setUserEvent] = useState("")
  const [userEventList, setUserEventList] = useState([])
  const [newUserEvent, setNewUserEvent] = useState("")

//Add event to DB
  const addUserEvent = () => {
    var userDate = (selectedDate   "").slice(3, 16);
    console.log("From addUserEvent", userDate)
    if (userEvent === "") {
      //alert("Please enter event")
    }
    else {
      Axios.post("http://localhost:3001/send", {
        userEvent: userEvent, userDate: userDate
      }).then(() => {
        //setUserEventList([...userEventList, { userEvent: userEvent, userDate: userDate}])
      });
      // changes the event list depending on what date the user clicks 
      document.getElementById('ui').value = '';
      setUserEvent(userEvent => userEvent = "")
    }
  };

  const getUserEvent = (userDate) => {
    Axios.get("http://localhost:3001/getData").then((response) => {
      setUserEventList(response.data)
      console.log("response.data: ", response.data)
    });
  };
}

 

backend.js

 //Setting up express, similar to flask
const express = require('express'); 
const app = express() 
const mysql = require('mysql'); 
const cors = require('cors')  

//Setting up SQL, hide password properly 
const db = mysql.createConnection({
    host:'localhost',
    user: 'root',
    password: '******',
    database: 'calendardb',
});

app.use(cors());
app.use(express.json()); 

// insert information in to DB
app.post('/send',(req,res) =>{
    const userEvent = req.body.userEvent
    const userDate = req.body.userDate //<---- Access this variable from the get below
    currentDate = req.body.userDate
    console.log("FROM DB ADD",userDate,"d",currentDate)
    db.query('INSERT INTO calevent (userEvent, userDate) VALUES (?,?)', 
    [userEvent,userDate], (err,result) =>{
        if(err){
            console.log(err)
        } else{
            res.send("Data send to DB")
        }
    }
    );
  });

//Getting Specific  data from DB
app.get("/getData",(req, res) =>{
    db.query("SELECT * FROM calevent WHERE userDate = ?", [userDate], (err, result) => {
        if(err){
            console.log(err)
        }else{
            res.send(result)
        }
        console.log(result)
    });
});
 

Ответ №1:

Остальные вызовы не имеют состояния, что означает, что каждый запрос должен быть независимым от состояния. Если вы стремитесь к спокойному сервису, я бы посоветовал этого не делать. Хотя сохранение его в сеансе (экспресс-сеанс) или что-то подобное может сработать, но я бы посоветовал вам добавить userDate в вызов get, а также параметр (так как запрос GET не будет иметь тела). Вы уже отправляете неиспользуемый аргумент userDate getUserEvent функции, что-то похожее на это.

 Axios.get("http://localhost:3001/getData", { params: { userDate }} )
 

Комментарии:

1. Спасибо за ввод, но теперь я получаю следующую ошибку You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?' at line 1

2. Дата пользователя теперь доступна для конечной точки GET по адресу req.params.userDate

3. Еще раз спасибо за ответ, это именно то, что я сделал. Но это возвращается как неопределенное.

4. Вот мой хит app.get("/getData",(req, res) =>{ const userDate = req.params.userDate console.log(userDate) //console.log(req.params.event) db.query("SELECT * FROM calevent WHERE userDate = ?", userDate, (err, result) => { if(err){ console.log(err) }else{ res.send(result) } console.log(result) }); });

5. Не могли бы вы попробовать сделать const userDate = req.query.userDate