【发布时间】:2020-08-23 10:24:52
【问题描述】:
我有一个具有快速后端的 React 应用程序。我正在尝试从我的前端获取到我的后端。这个获取是一个登录,我通过各种凭据检查我的 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 后端):
...
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'));
});
package.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"
]
}
}
static.json
{
"root": "build/",
"routes": {
"/assets/*": "/assets/",
"/**": "index.html"
}
}
Login.js(反应组件):
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})
}
})
})
【问题讨论】:
标签: javascript node.js reactjs heroku deployment