Heim  >  Fragen und Antworten  >  Hauptteil

Senden Sie Daten von React mit onSubmit an Node js

Ich habe dieses onSubmit in meinem React-Skript, das aufgerufen wird, wenn ich auf die Schaltfläche „Senden“ klicke:

const handleSubmit = (event) => {
event.preventDefault();
const form = event.target;
const rawdata = new FormData(form);
const data = {
    email: rawdata.get('email'),
    password: rawdata.get('password'),
};

console.log(data);
const response = fetch('http://localhost:4000/register', {
    method: 'POST',
    headers: {
        'Content-Type': 'application/json',
    },
    body: JSON.stringify(data),
}).then(response => {
    if(response.ok) {
        console.log('Form data sent successfully');
    } else {
        console.error('Failed to send form data');
    }
}).catch (error => console.error(error));
}

Es sollte die Daten an mein Node-JS-Skript senden und die folgende Funktion aufrufen:

app.post("/register", function (req, res){
    console.log("inside /register");
    console.log("email: " + req.body.email);
    User.register({username: req.body.email}, req.body.password, function(err, user){
        if(err) {
            console.log(err);
            console.log("couldn't register");
            //res.redirect("/signup");
        } else{
            passport.authenticate("local")(req, res, function(){
                console.log("login granted");
            });
        }
    });
});

Aber es heißt, dass die Daten, die ich zu protokollieren versuche (req.body.email), undefiniert sind. Wenn mir jemand helfen kann, wäre ich sehr dankbar. Danke

P粉281089485P粉281089485171 Tage vor265

Antworte allen(1)Ich werde antworten

  • P粉308783585

    P粉3087835852024-04-03 09:16:55

    我编辑了如下代码,现在我可以从我的 Node js 脚本中的 React 脚本获取数据了:

    const handleSubmit = (event) => {
        event.preventDefault();
        const form = event.target;
        const rawdata = new FormData(form);
        const data = {
            email: rawdata.get('email'),
            password: rawdata.get('password'),
        };
    
        console.log(data);
        fetch('http://localhost:4000/register', {
            method: 'POST',
            headers:{
                'Content-Type' : 'application/json'
            },
            body: JSON.stringify(data)
        })
        .then(response => {
            console.log("response ok: " + response.ok);
            console.log("response status: " + response.status);
            console.log("response json: " + response.json());
            if(response.ok) {
                console.log('Form data sent successfully');
                return response.json();
            } else {
                console.error('Failed to send form data');
            }
        }).catch (error => console.error(error));

    并且在我的节点脚本中,我必须在开头添加以下行:

    app.use(bodyParser.json());
    app.use(express.static("public"));
    app.set('view engine', 'ejs');
    app.use(bodyParser.urlencoded({
       extended: true
    }));

    现在可以了。节点中的 app.use 行是问题所在。

    Antwort
    0
  • StornierenAntwort