Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何正确链接所有涉及mongo数据库的承诺_Node.js_Mongodb_Promise - Fatal编程技术网

Node.js 如何正确链接所有涉及mongo数据库的承诺

Node.js 如何正确链接所有涉及mongo数据库的承诺,node.js,mongodb,promise,Node.js,Mongodb,Promise,我是Node和Mongo的初学者,所以我需要一些帮助。我正在练习链接承诺和MongoDB。我想将两个插入操作链接在一起。但是,当我运行这个代码文件时,我得到一个错误:“TypeError:无法读取未定义的属性'db' at/Users/jenniferzhou/Documents/2018-2019/MEAN-Practice/Guru99/E8/mongopractice5.js:12:22 在process.internalTickCallback(internal/process/next

我是Node和Mongo的初学者,所以我需要一些帮助。我正在练习链接承诺和MongoDB。我想将两个插入操作链接在一起。但是,当我运行这个代码文件时,我得到一个错误:“TypeError:无法读取未定义的属性'db' at/Users/jenniferzhou/Documents/2018-2019/MEAN-Practice/Guru99/E8/mongopractice5.js:12:22 在process.internalTickCallback(internal/process/next_tick.js:77:7) " 错误表明问题出在这行代码上:“var db=client1.db('EmployeeDB')”。但是,我不确定为什么此行会返回错误。我知道MongoClient.connect(url,{useNewUrlParser:true})返回一个承诺,但是这个承诺在某种程度上与第一个返回的承诺不同吗


您应该在每个请求结束后关闭

你没有使用你导入的promise库


您应该在每个请求结束后关闭


您没有使用您导入的承诺库。

连接和插入返回承诺。这些是用
然后
方法链接的。依我看,构建完成离散任务和返回承诺的函数也是可取的,所以

const MongoClient = require('mongodb').MongoClient

function mongoConnect(url) {
    return MongoClient.connect(url, { useNewUrlParser: true });
}

function mongoClose(db) {
    return db.close();
}

function insertEmployee(db, employee) {
    return db.collection('Employee').insertOne(employee);
}

function insertSomeEmployees() {
    let db;
    return mongoConnect('mongodb://localhost:27017').then(result => {
        db = result;
        return insertEmployee(db, { Employeeid: 4, EmployeeName: "NewEmployee" });
    }).then(() => {
        return insertEmployee(db, { Employeeid: 5, EmployeeName: "NewEmployee1" });
    }).then(() => {
        return mongoClose(db);
    }).catch(function(err) {
        console.log(err)
    }); 
}

连接和插入返回承诺。这些是用
然后
方法链接的。依我看,构建完成离散任务和返回承诺的函数也是可取的,所以

const MongoClient = require('mongodb').MongoClient

function mongoConnect(url) {
    return MongoClient.connect(url, { useNewUrlParser: true });
}

function mongoClose(db) {
    return db.close();
}

function insertEmployee(db, employee) {
    return db.collection('Employee').insertOne(employee);
}

function insertSomeEmployees() {
    let db;
    return mongoConnect('mongodb://localhost:27017').then(result => {
        db = result;
        return insertEmployee(db, { Employeeid: 4, EmployeeName: "NewEmployee" });
    }).then(() => {
        return insertEmployee(db, { Employeeid: 5, EmployeeName: "NewEmployee1" });
    }).then(() => {
        return mongoClose(db);
    }).catch(function(err) {
        console.log(err)
    }); 
}

似乎您没有从第一个
返回任何内容,然后
尝试记录client1,我猜它是未定义的。在第二个
。然后()
,“client1”将是未定义的,
客户端
超出范围。您需要阅读。似乎您没有从第一个
返回任何内容,然后
尝试记录client1,我猜它未定义。在第二个
。然后()
,“client1”将未定义,并且
客户端
超出范围。你需要阅读。所以我想我不需要要求(“承诺”)。为什么我可以使用then函数?@JenniferZhou它是对象的一种方法,而不是需要导入(或全局定义)的静态函数。因此我想我不需要要求('promise')。为什么我可以使用then函数?@JenniferZhou它是对象的一种方法,而不是需要导入(或全局定义)的静态函数。client和db之间有什么区别?客户端是否拥有所有可用的数据库?(客户持有的东西有一个术语吗?)我从操作代码中复制了这个术语,认为这是您需要的东西。我见过的大多数mongo客户端使用只需要connect调用中的db。“我将根据惯例对其进行编辑。”詹尼弗周编辑。请注意,此版本仅引用db中的“Employee”集合,而没有引用另一个答案是:承诺现在是JS的固有语言。另外请注意,另一个答案是使用async时有点松散,或多或少同时启动两个插入,而不知道其中一个何时完成。通常,我们希望在做其他事情之前或之后严格地做一些事情,所以我们构建承诺链来控制这些事情。客户机和db之间的区别是什么?客户端是否拥有所有可用的数据库?(客户持有的东西有一个术语吗?)我从操作代码中复制了这个术语,认为这是您需要的东西。我见过的大多数mongo客户端使用只需要connect调用中的db。“我将根据惯例对其进行编辑。”詹尼弗周编辑。请注意,此版本仅引用db中的“Employee”集合,而没有引用另一个答案是:承诺现在是JS的固有语言。另外请注意,另一个答案是使用async时有点松散,或多或少同时启动两个插入,而不知道其中一个何时完成。通常,我们希望严格地在其他事情之前或之后做一些事情,所以我们构建承诺链来控制这些事情。
const MongoClient = require('mongodb').MongoClient

function mongoConnect(url) {
    return MongoClient.connect(url, { useNewUrlParser: true });
}

function mongoClose(db) {
    return db.close();
}

function insertEmployee(db, employee) {
    return db.collection('Employee').insertOne(employee);
}

function insertSomeEmployees() {
    let db;
    return mongoConnect('mongodb://localhost:27017').then(result => {
        db = result;
        return insertEmployee(db, { Employeeid: 4, EmployeeName: "NewEmployee" });
    }).then(() => {
        return insertEmployee(db, { Employeeid: 5, EmployeeName: "NewEmployee1" });
    }).then(() => {
        return mongoClose(db);
    }).catch(function(err) {
        console.log(err)
    }); 
}