У меня есть приложение React с серверной частью express. Я пытаюсь выполнить выборку из внешнего интерфейса в серверную часть. Эта выборка представляет собой логин, в который я передаю различные учетные данные, проверяя свой clearDB, чтобы узнать, является ли пользователь законным или нет. По какой-то причине я получаю сообщение 404, которое не найдено. Хорошая новость заключается в том, что 404 означает, что мой бэкэнд и фронтенд хорошо взаимодействуют, но плохая новость заключается в том, что он не может получить доступ к маршруту должным образом. Я предоставил здесь несколько файлов. Сообщите мне, если вам понадобятся дополнительные файлы. Как всегда, я ценю вашу поддержку и с нетерпением жду этого обсуждения.
Структура папки:
DemoApp
>bin
>classes
>client
->build
->node_modules
->public
->public
->src
->package.json
->static.json
>Design
>node_modules
>public
>routes
->api.js
>views
app.js
package.json
Журналы консоли:
Login.js:69 POST https://<hostname>.herokuapp.com/api/login 404 (Not Found)
app. js (NodeJS backend) :
...
const corsOptions = {
origin: 'http://localhost:3000',
credentials: true
}
app.use(cors(corsOptions))
app.use('/', express.static(path.join(__dirname, '/client/build')));
app.get('*', function(request, response) {
response.sendFile(path.join(__dirname, '/client/build', 'index.html'));
});
пакет. json (находится в папке клиента):
{
"name": "app",
"version": "0.1.0",
"private": true,
"dependencies": {
"@testing-library/jest-dom": "^4.2.4",
"@testing-library/react": "^9.5.0",
"@testing-library/user-event": "^7.2.1",
"bootstrap": "^4.4.1",
"email-validator": "^2.0.4",
"owasp-password-strength-test": "^1.3.0",
"password-validator": "^5.0.3",
"prop-types": "^15.7.2",
"react": "^16.13.1",
"react-bootstrap": "^1.0.1",
"react-dom": "^16.13.1",
"react-dropdown": "^1.7.0",
"react-router-dom": "^5.1.2",
"react-scripts": "3.4.1",
"semantic-ui-react": "^0.88.2"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": "react-app"
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
}
stati c. json
{
"root": "build/",
"routes": {
"/assets/*": "/assets/",
"/**": "index.html"
}
}
Вход. js (компонент REACT):
const url = '/api/login'
fetch(url, {
method: 'POST',
credentials: 'include',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(user)
})
api. js (NodeJS внутренний маршрут)
.
.
.
var connection = mysql.createPool('mysql://<username>:<password>@<host>/<database name>?reconnect=true')
router.post('/login', function(req,response,next) {
const query1 = "SELECT * FROM users WHERE username = TRIM(?)"
connection.query(query1, [req.body.username], function(err, result) {
if (err) {
response.json({'message': 'Incorrect Username/Password', 'status': 0})
} else {
req.session.username = req.body.username
response.json({'message': 'You have successfully logged in', 'status': 1})
}
})
})