问题描述
我正在制作一个 MERN 应用程序,但在连接/运行节点和反应服务器时遇到了一些问题。
根 package.json
{
"name": "server","version": "0.0.0","private": true,"scripts": {
"start": "nodemon server/server","client": "npm start --prefix client","dev": "concurrently \"npm start\" \"npm run client\""
},"dependencies": {
"async": "^3.2.0","cookie-parser": "~1.4.4","debug": "~2.6.9","dotenv": "^10.0.0","express": "~4.16.1","http-errors": "~1.6.3","jade": "~1.11.0","mongoose": "^5.13.0","morgan": "~1.9.1","populatedb": "^1.0.0"
},"devDependencies": {
"concurrently": "^6.2.0","nodemon": "^2.0.8"
}
}
客户端代理:
"proxy": "http://127.0.0.1:5000","secure": false
主服务器文件:
require('dotenv').config();
var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
const mongoose = require('mongoose');
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var app = express();
// set up mongoose connection
const mongoDB = process.env.DB_STRING;
mongoose.connect(mongoDB,{ useNewUrlParser: true,useUnifiedTopology: true });
const db = mongoose.connection;
db.on('error',console.error.bind(console,'MongoDB connection error:' ));
console.log('Connected');
// view engine setup
app.set('views',path.join(__dirname,'views'));
app.set('view engine','jade');
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname,'public')));
app.use('/',indexRouter);
app.use('/users',usersRouter);
if(process.env.NODE_ENV !== 'development') {
app.get('*',function (req,res) {
res.sendFile(path.resolve(__dirname,'client/build','index.html'));
});
}
const PORT = process.env.PORT || 5000
//Express js listen method to run project on http://localhost:5000
app.listen(PORT,console.log(`App is running in ${process.env.NODE_ENV} mode on port ${PORT}`))
// catch 404 and forward to error handler
app.use(function(req,res,next) {
next(createError(404));
});
// error handler
app.use(function(err,req,next) {
// set locals,only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
module.exports = app;
我正在使用“npm run dev”命令来启动服务器。 我收到一条错误消息“代理错误:无法将请求 /users 从 localhost:3000 代理到 http://127.0.0.1:5000"。 我尝试将代理更改为 0.0.0 并将脚本文件更改为:
"start": "node ./bin/www","devstart": "nodemon ./bin/www","dev": "concurrently \"npm start\" \"npm run client\""
但是还是不行。我已经尝试了一些我发现的其他解决方案,但无法解决问题。
这也是我的测试反应文件:
import React,{ useState,useEffect } from "react";
import axios from "axios";
const App = () => {
const [users,setUsers] = useState([]);
const getData = async () => {
const res = await axios.get("/users");
setUsers(res.data);
};
useEffect(() => {
getData();
},[]);
return (
<div>
{users.map((u) => (
<h4 key={u._id}>userName : {u.full_name}</h4>
))}
</div>
);
};
export default App;
这也是我的文件夹结构,如果有可能的话
解决方法
在尝试了更多解决方案来解决问题后,有效的是:
在一个终端选项卡中运行 nodemon app.js
在第二个终端选项卡中运行 npm start --prefix client
。
并发模块可能有问题,因为这是有效的。