J'essaie de soumettre quelques zones de texte à ma base de données SQL en utilisant React js via une demande de publication, puis du côté serveur, j'écoute le message et j'interroge les données dans ma base de données. À l'heure actuelle, les deux valeurs retournent "indéfini" indépendamment de ce que l'utilisateur saisit dans le formulaire, donc je pense que j'ai foiré le code côté React. Voici le code que j'utilise
Server.js :
import React, { Component } from 'react';
class postData extends Component {
constructor() {
super();
this.state = { user: {} };
this.onSubmit = this.handleSubmit.bind(this);
}
handleSubmit(e) {
e.preventDefault();
var self = this;
// On submit of the form, send a POST request with the data to the server.
fetch('http://localhost:5000', {
method: 'POST',
body: {
FirstName: self.refs.FirstName,
LastName: self.refs.LastName
}
})
.then(function(response) {
return response.json()
}).then(function(body) {
console.log(body);
});
}
render() {
return (
<form onSubmit={this.onSubmit}>
<input type="text" placeholder="First Name" ref="FirstName"/>
<input type="text" placeholder="Last Name" ref="LastName"/>
<input type="submit" />
</form>
);
}
}
export default postData;
Et voici mon code de réaction ...
postData.js:
var express = require('express');
var app = express();
var sql = require("mssql");
const bodyParser = require('body-parser');
app.use(bodyParser.json());
var config = {
user: 'user',
password: 'pass',
server: 'localhost',
database: 'Master'
};
app.post('/', function(req, res) {
res.set('Access-Control-Allow-Origin', '*');
const { FirstName, LastName } = req.body;
let connection = new sql.ConnectionPool(config, function(err) {
let request = new sql.Request(connection);
request.query("insert into persons (FirstName, LastName) values ('" + FirstName + "', '" + LastName + "')");
});
res.send({ message: 'Success'})
});
app.listen(5000, () => {console.log('Server is running..')});
Encore une fois, je suis à peu près sûr que j'ai foiré le code du côté React, mais je ' Je suis assez nouveau dans tout cela, donc je ne sais pas par où commencer le dépannage. Lorsque je console.log le req.body côté serveur, il renvoie simplement {}, il semble donc qu'aucune donnée ne soit envoyée par le script react.
Merci!
3 Réponses :
Ajoutez ces lignes à la demande de récupération:
app.post('/', function(req, res) {
res.set('Access-Control-Allow-Origin', '*');
const body = JSON.parse(req.body);
let connection = new sql.ConnectionPool(config, function(err) {
let request = new sql.Request(connection);
request.query("insert into persons (FirstName, LastName) values ('" + body.FirstName + "', '" + body.LastName + "')");
});
res.send({ message: 'Success'})
});
Puis dans votre serveur
fetch('http://localhost:5000',
{ method: 'POST',
headers: new Headers({
"Content-Type":"application/json"
}),
body: JSON.stringify({
FirstName: self.refs.FirstName,
LastName: self.refs.LastName })
})
J'espère que cela vous aidera.
p>
Merci Monsieur. Obtention d'une erreur sur la partie JSON.stringify "TypeError: Conversion de la structure circulaire en JSON". Besoin de restructurer le corps?
Pour que votre code fonctionne, remplacez simplement cette partie:
body: {
FirstName: self.refs.FirstName.value,
LastName: self.refs.LastName.value
}
par ceci:
body: {
FirstName: self.refs.FirstName,
LastName: self.refs.LastName
}
mais je vous suggère de faire simplement comme @Yousaf l'a fait, et utilisez React.createRef (); pour créer des références aux éléments dans React
Merci, mais toujours indéfini pour mes valeurs. Quand je console.log le req.body il renvoie juste {}
Merci pour tous les types d'aide. J'ai incorporé beaucoup de recommandations que vous avez données, mais la goutte finale était la suivante dans mon code server.js
app.use(express.json({
type: ['application/json', 'text/plain']
}));
Une fois que j'ai inclus ce changement, j'ai pu éliminer l'erreur indéfinie que j'étais obtenir
Ainsi, lorsque vous console.log côté client , quelles sont les valeurs envoyées?