gpt4 book ai didi

node.js - Mongoose 不会将文档保存到本地数据库

转载 作者:太空宇宙 更新时间:2023-11-04 00:07:27 26 4
gpt4 key购买 nike

正如我所想,我的问题很简单。我可以运行 mongoose 将文档保存到 mlab 上的数据库中。还可以通过 postman 在获取请求时查看保存的数据。但是当我使用本地 mongodb 而不是 mlab 时,尝试通过运行“mongo”在终端上显示数据库集合,然后选择 mongoose 连接到的相同数据库它向我显示了一个空数据库。我再次尝试发送带有新数据的post请求..结果是相同的,对 postman 和mlab来说是积极的,但是当连接到本地mongodb并发布新数据时..根本没有任何东西。我可以将数据插入 shell 的唯一方法是通过命令 insert()。

知道为什么会发生这种情况吗?预先感谢您。

app.js

        var express = require("express");
var app = express();
var port = 8080;
var bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

var mongoose = require("mongoose");
mongoose.Promise = global.Promise;
mongoose.connect("mongodb://localhost:27017/test",{ useNewUrlParser: true });


// Model & Schema
var nameSchema = new mongoose.Schema({
firstName: String,
lastName: String
});
var User = mongoose.model("User", nameSchema);



// Routes
app.get('/users', (req, res) => {
User.find({}, (err, user) => {
if (err) throw err;
console.log(user)
res.send(user)
})
})
app.post("/addname", (req, res) => {
var myData = new User(req.body);
myData.save()
.then(item => {
res.send("item saved to database");
})
.catch(err => {
res.status(400).send("unable to save to database");
});
});



app.use("/", (req, res) => {
res.sendFile(__dirname + "/index.html");
});

app.listen(port, () => {
console.log("Server listening on port " + port);
});

当我使用 mlab 时:

enter image description here

enter image description here

enter image description here

但是当使用本地机器时......:

enter image description here

enter image description here

enter image description here

最佳答案

在添加 api 中尝试像下面这样

app.post("/addname", (req, res) => {
req.body = JSON.parse(JSON.stringify(req.body)); //This line is Optional, some time req.body is in json buffer form so we are converting to pure json
User(req.body).save().then(item => {
console.log("DB Item saved --->", item);
res.status(200).send("item saved to database");
}).catch(err => {
res.status(400).send("unable to save to database");
});
});

不要忘记req.body必须包含firstName、lastName

在您更新有关集合(架构)文档列表的问题后

你正在尝试

db.test.find()

这将不起作用,因为您的架构名称是 User 并将保存为用户,因为 mongodb 更喜欢复数集合名称,因为它由多个文档组成

你一定要尝试

db.users.find() 在 mongo shell 中

它将返回用户集合的所有文档。

如果您想要特定的集合名称(架构名称),那么您必须创建如下架构

// Model & Schema
var nameSchema = new mongoose.Schema({
firstName: String,
lastName: String
}, { collection: 'User' });
var User = mongoose.model("User", nameSchema);

在 mongo shell 中你必须尝试像

db.User.find();

要列出 mongo shell 中的所有集合,您必须尝试如下

db.getCollectionNames()

关于node.js - Mongoose 不会将文档保存到本地数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51585290/

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