Post 请求在 MERN 上待处理

Post request pending on MERN

我正在尝试学习 MERN 堆栈。我正在创建我的第一个非常简单的网站。现在,我创建了一条路线,我在其中创建了一个用户,使用传递给 throw 主体的数据。这是服务器的代码:

const express = require('express');
const cors = require('cors');
const mongoose = require('mongoose');

require('dotenv').config();


const app = express();
const port = process.env.PORT || 5000;

app.use(cors);
app.use(express.json());

const uri = process.env.ATLAS_URI;
mongoose.connect(uri, { useNewUrlParser:true });

const connection = mongoose.connection;
connection.once('open', () =>{
    console.log("MongoDB database connection established succesfully")
})

const usersRouter = require('./routes/users');
app.use('/users', usersRouter); 

app.listen(port, () => {
    console.log(`Server is running on port: ${port}`);
});

现在,这是用户路由器文件的代码,我将代码放入:

const router = require('express').Router();//setting it as a express router
let User = require('../models/user.model');//requise the model created before

router.route('/').get((req, res) => {
  User.find()//mongoose method, returns a promise
    .then(users => res.json(users))//return the list of user
    .catch(err => res.status(400).json('Error: ' + err));
});

router.route('/add').post((req, res) => {
  const username = req.body.username;

  const newUser = new User({username});

  newUser.save()
    .then(() => res.json('User added!'))
    .catch(err => res.status(400).json('Error: ' + err));
});

module.exports = router;

最后,这里是模型用户模式:

const mongoose = require('mongoose');

const Schema = mongoose.Schema;


//create the schema for the user
//like the model in Flask
const userSchema = new Schema({
    username: {
        type: String,
        required: true,
        unique: true,
        trim: true,
        minlength: 3
    },
},{
    timestamps:true,
});

const User = mongoose.model('User', userSchema); //create the model, via the schema

module.exports = User;

现在,为了测试它是否正确,在实现其他代码和前端之前,我想测试一下。首先我想添加一个新用户,看看 API 是否正常工作。我正在使用邮递员。我在 URL 上发送了请求:http://127.0.0.1:5000/users/add,正文中包含以下 json:{"username": "name"}。然后我发送,但 Postman 继续说它正在发送请求,并且持续了几分钟。我不明白问题是否出在承诺上,太低了,是不是我在代码或测试配置中写错了什么,是 Mongo 数据库有问题,还是其他任何问题。你能帮我吗?谢谢

在您的数据库连接中,您没有等待 promise 成为 resolved

    require('dotenv').config();
    const express = require('express');
    const cors = require('cors');
    const mongoose = require('mongoose');
    
    const app = express();
    app.use(cors());
    app.use(express.json());
    
    const port = process.env.PORT || 5000;
    
    const connectDB = async () => {
      try {
        const conn = await mongoose.connect(process.env.ATLAS_URI, {
          useUnifiedTopology: true,
          useNewUrlParser: true,
        });
    
        console.log(`MongoDB Connected: ${conn.connection.host}`);
      } catch (err) {
        console.error(`Error: ${err.message}`);
        process.exit(1);
      }
    };
    
    
    connectDB()
    
    
    const usersRouter = require('./routes/users');
    app.use('/users', usersRouter); 
    
    app.listen(port, () => {
        console.log(`Server is running on port: ${port}`);
    });