猫鼬不会将文档保存到本地数据库中

时间:2018-07-29 23:11:11

标签: node.js mongodb express mongoose

我的问题很简单。 我可以运行猫鼬将文档保存到我在mlab上的数据库。 也可以通过邮递员在获取请求时查看保存的数据。 但是,当我使用本地mongodb而不是mlab时,请尝试通过运行“ mongo”在我的终端上显示db集合,然后选择连接到mongoose的同一个db 它显示了一个空的数据库。 我再次尝试发送带有新数据的请求。.结果是相同的,对邮递员和mlab都是积极的,但是当连接到本地mongodb并发布新数据时..根本没有任何东西。我可以将数据插入到我的外壳的唯一方法是通过命令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

1 个答案:

答案 0 :(得分:1)

在添加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()
相关问题