#reactjs #express #body-parser
#reactjs #экспресс #синтаксический анализатор тела
Вопрос:
Проблема промежуточного программного обеспечения с синтаксическим анализатором тела: данные сохраняются как объект, который позже вызывает /api/new для публикации в базе данных SQL.
Никаких проблем с самим запросом, но данные имеют нулевые значения в базе данных.
Мои мысли:
-
app.use(express.urlencoded({ extended: true })); имеет значение true, так как некоторые значения являются INT,
-
Я попробовал JSON.Строковая обработка данных перед отправкой в POST-запрос. Не сработало
-
Также поиграл с заголовком
// const config = { // заголовки: { // принять: «application / json», // «accept-language»: «en_US», // «content-type»: «application / x-www-form-urlencoded» // } // };
axios.post(«/api/new»,{newEntry}, config …
-
Я думаю, что проблема может быть связана с тем, что его router.post в моих api-маршрутах вместо app.post
``` var newEntry = { First_Name: FirstName.toUpperCase(), Last_Name: LastName.toUpperCase(), Employ_ID: parseInt(EmployID), Problem: checkedValue, PhoneNumber: phoneNumber, Provider: domain }; var stringNewEntry = JSON.stringify(newEntry); console.log("Right before Post"); console.log(newEntry); axios .post( "/api/new", {newEntry}, { timeout: 10000 } ) .catch(error => { if (error.code === "ECONNABORTED") return "timeout"; }) .then(res => { console.log(newEntry); if (res === "timeout") { console.log("Please Try Again"); } else { console.log("SUCCESS!"); } }); } ````
Файл сервера
const express = require("express"); const app = express(); var bodyParser = require('body-parser') const PORT = process.env.PORT || 3001; var routes = require("./routes/api-routes"); // Define middleware here app.use(express.json()); app.use(bodyParser.json()); app.use(express.urlencoded({ extended: true })); // Serve up static assets (usually on heroku) if (process.env.NODE_ENV === "production") { app.use(express.static("client/build")); } // Add routes, both API and view app.use(routes); // Start the API server app.listen(PORT, function() { console.log(`🌎 ==> API Server now listening on PORT ${PORT}!`); });
api-маршруты
router.route("/api/new").post(function(req, res) {
console.log("Data:");
console.log(req.body.First_Name);
var dbQuery =
"INSERT INTO KioskInfo (First_Name,Last_name,Employ_ID,Problem,PhoneNumber,Provider) VALUES (?,?,?,?,?,?)";
var dbQueryPermanent =
"INSERT INTO KioskData (First_Name,Last_name,Employ_ID,Problem) VALUES (?,?,?,?)";
var IgnoreQuery =
"INSERT IGNORE INTO KioskInfo (First_Name,Last_name,Employ_ID,Problem,PhoneNumber,Provider) VALUES (?,?,?,?,?,?)";
connection.query(
dbQuery,
[
req.body.First_Name,
req.body.Last_Name,
req.body.Employ_ID,
req.body.Problem,
req.body.PhoneNumber,
req.body.Provider
],
function(err, result) {
if (err) {
connection.query(
IgnoreQuery,
[
req.body.First_Name,
req.body.Last_Name,
req.body.Employ_ID,
req.body.Problem,
req.body.PhoneNumber,
req.body.Provider
],
function(IgnErr, IgnResult) {
if (IgnErr) {
throw IgnErr;
} else {
console.log("Duplicate Entry Ignored");
}
}
);
}
//Learn to specify DUP ERR;
console.log("Successfully Saved Into KioskInfo");
}
);
connection.query(
dbQueryPermanent,
[
req.body.First_Name,
req.body.Last_Name,
req.body.Employ_ID,
req.body.Problem
],
function(err, result) {
if (err) throw err;
console.log("Successfully Saved Into KioskData");
res.end();
}
);
});