gpt4 book ai didi

javascript - Mongoose、express 返回空数组

转载 作者:行者123 更新时间:2023-12-02 22:31:47 25 4
gpt4 key购买 nike

我读过很多类似的问题,讨论 Mongoose 默认模型名称的复数化。尽管这似乎不适用于本案。问题是它返回一个空数组。我的本地 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`, async (req, res) => {
let user = await User.create(req.body);
return res.status(201).send({
error: false,
user
})
})

app.put(`/user/:id`, async (req, 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`, async (req, 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}`)
});

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

最佳答案

在架构代码中,您需要定义字段类型,例如 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 中正确导入这样的 User 模型即可。

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

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

app.use(bodyParser.json()); 

通过这些更改,您可以使用此 url http://localhost:3000/user 创建用户使用像这样的 json 主体:

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

这将给出如下结果:

{
"error": false,
"user": {
"_id": "5dce7f8c07d72d4af89dec57",
"name": "John",
"surname": "Doe",
"team": "CE",
"project": "Project1",
"id": "2",
"__v": 0
}
}

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

当您向 http://localhost:5000 发送 get 请求时url,你会得到这样的用户:

[
{
"_id": "5dce75a91cbb4e5f7c5ebfb3",
"name": "John",
"surname": "Doe",
"team": "CE",
"project": "Project1",
"id": "2",
"__v": 0
}
]

关于javascript - Mongoose、express 返回空数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58874131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com