猫鼬,快递返回一个空数组

我已经读过很多类似的问题,在默认情况下,在猫鼬上讨论了模型名称的复数形式。尽管在这种情况下似乎不起作用。问题是它返回一个空数组。我的本地mongoDB在“ userData”集合中包含2个文档,它们看起来像这样:

{
        "_id" : ObjectId("5dcd0582587ac600ec9323a5"),"name" : "John","surname" : "Doe","team" : "CE","project" : "Project1","id" : "2"
}

然后这就是我的模型User.js

const mongoose = require('mongoose');
const { Schema } = mongoose;

const userSchema = new Schema({
    name: 'String',surname: 'String',team: 'String',project: 'String',id: 'String'
},{ collection: 'UserData' });

module.exports = mongoose.model('user',userSchema);

这是我的路线userRoutes.js

const mongoose = require('mongoose');
const User = mongoose.model('user');

module.exports = (app) => {

  app.get(`/`,async (req,res) => {
    let users = await User.find();
    return res.status(200).send(users);
  });

  app.post(`/user`,res) => {
    let user = await User.create(req.body);
    return res.status(201).send({
      error: false,user
    })
  })

  app.put(`/user/:id`,res) => {
    const { id } = req.params;
    let user = await User.findByIdAndUpdate(id,req.body);
    return res.status(202).send({
      error: false,user
    })

  });

  app.delete(`/user/:id`,res) => {
    const { id } = req.params;
    let user = await User.findByIdAndDelete(id);
    return res.status(202).send({
      error: false,user
    })

  })

}

最后,这是我的出发点index.js

const express = require('express');
const mongoose = require('mongoose'); /*-- Import the mongoose module --*/
const bodyParser = require('body-parser');
require('./models/User');

const app = express();

mongoose.Promise = global.Promise;
mongoose.connect('mongodb://localhost:27017/users',{ useUnifiedTopology: true,useNewUrlParser: true })  
  .then(() => console.log('Database Connection Succesful'))
  .catch(err => console.log('Database Connection Error0'));

var db = mongoose.connection;

db.on('error',console.error.bind(console,'MongoDB connection error:'));
app.use(bodyParser.json());

require('./routes/userRoutes')(app);

if (process.env.NODE_ENV === 'production') {
  app.use(express.static('client/build'));

  const path = require('path');
  app.get('*',(req,res) => {
    res.sendFile(path.resolve(__dirname,'client','build','index.html'))
  })

}

const PORT = process.env.PORT || 5000;
app.listen(PORT,() => {
  console.log(`app running on port ${PORT}`)
});

然后,我返回的是一个空数组[]。任何帮助表示赞赏。

yaozhiying 回答:猫鼬,快递返回一个空数组

在架构代码中,您需要定义诸如 name:String 之类的字段类型,而不是 name:“ String”

您的架构必须是这样的:

const mongoose = require("mongoose");
const { Schema } = mongoose;

const userSchema = new Schema(
  {
    name: String,surname: String,team: String,project: String,id: String
  },{ collection: "UserData" }
);

module.exports = mongoose.model("user",userSchema);

您还已经创建了用户模型,因此在userRoute中无需这样做:

const User = mongoose.model('user');

您只需要在userRoute中正确导入用户模型即可。

const User = require("../models/User"); // you can change the path if it is not correct

最后要为发布数据启用json,您需要将此行添加到index.js:

app.use(bodyParser.json()); 

通过这些更改,您可以使用如下json主体使用此网址http://localhost:3000/user创建一个用户:

{
    "name": "John","surname": "Doe","team": "CE","project": "Project1","id": "2"
}

这将给出如下结果:

{
    "error": false,"user": {
        "_id": "5dce7f8c07d72d4af89dec57","name": "John","id": "2","__v": 0
    }
}

这时您将拥有一个UserData集合。

当您向http://localhost:5000网址发送获取请求时,您将获得以下用户:

[
    {
        "_id": "5dce75a91cbb4e5f7c5ebfb3","__v": 0
    }
]
本文链接:https://www.f2er.com/3096538.html

大家都在问