在 MERN 上等待发布请求

Posted

技术标签:

【中文标题】在 MERN 上等待发布请求【英文标题】:Post request pending on MERN 【发布时间】:2021-11-21 13:48:20 【问题描述】:

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

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"。然后我发送,但邮递员继续告诉我它正在发送请求,并且持续了几分钟。我无法理解问题是否在于承诺,是否太低,是否我在代码或测试配置中写错了某些内容,Mongo 数据库是否存在问题,或其他任何问题。你能帮我吗?谢谢

【问题讨论】:

app.use(cors()) 不是app.use(cors) 始终使用 morgan 之类的记录器或其他库来记录请求。 似乎您没有从服务器发回任何响应! 【参考方案1】:

在您的数据库连接中,您不会等待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`);
    );

【讨论】:

以上是关于在 MERN 上等待发布请求的主要内容,如果未能解决你的问题,请参考以下文章

待发布在 Google Play 上还有 2 天,有问题吗?

iPhone 应用程序处于待发布状态后在 iTunes Connect 中编辑屏幕截图

利用gulp把本地文件移动到指定待发布文件夹

当应用程序处于“待发布”阶段并由审阅者/测试人员(Google Play 商店)使用/审阅时,InstallerPackageName 是啥?

MySQL中使用union all获得并集的排序

待处理的开发者发布问题