关于node操作mongodb的二三事

      Mongodb是nosql中的翘楚,所以我的毕设就赶了一把潮流,用mongodb狠狠的在到是面前装了一下。结果结果导师说你这抄的太明显了叫喊    ╮(╯_╰)╭。

     由于mongodb中无主键概念,所有记录其都给生成 _id为唯一标示,集合取代了表。刚开始我还是用mysql思维去思考结果被项目组长训斥说不能快速接受新鲜事物。

     既然没了主键概念那外键也不幸免,没了外键与主键(其实mongo也有一些方法来实现这些sql特性)对于俩张表以上的联合操作,在当时真的让我很无奈。且node是异步稍不注意,代码就成了回调深渊,要多深有多深。。。

      不过对于node中的异步操作有多种方式解决,导包、promise等,promise大家可以根据简书上的教程去学习,语言简练且不缺乏段子,总之你看了会受益匪浅。在这里我给大家推荐async包,具体实例大家可以去github上根据demo练习。

      我只贴出我所用到的map流:

mongoClient.connect(setting.dbInfo, function (err, db) {
        var teacher = db.collection('teacher');
        teacher.find({course:{$exists:true}}).toArray(function (err, teacherDoc) {
            if (err) {
                console.log('error if ------>')
                res.status('500');
                res.json({
                    result: 'ERROR_1',
                    resson: '#_1 System error! '
                });
            }
            if (teacherDoc.length > 0) {
                res.status('200');
                async.map(teacherDoc, function (itemT, callbackT) {
                    async.map(itemT.course, function (itemC, callbackC) {
                        var course = db.collection('course');
                        course.find({'name': itemC}).toArray(function (err, courseDoc) {
                            if (err) {
                                callbackC(err, null)
                            } else {
                                courseDoc[0].teacherName = itemT.name;
                                courseDoc[0].teacherTel = itemT.tel_phone;
                                courseDoc[0].teacherEdu = itemT.edu_level;
                                courseDoc[0].teacherSex = itemT.sex;
                                courseDoc[0].teacherAge = itemT.age;
                                callbackC(null, courseDoc[0]);
                            }
                        });
                    }, function (errc, resultC) {
                        if (errc) {
                            console.log(errc);
                        } else {
                            callbackT(null, resultC)
                        }
                    })
                }, function (errr, resultT) {
                    if (errr) {
                        console.log(errr);
                    } else {
                        res.json({
                            result: 'OK',
                            teaAll: _.flatten(resultT)
                        });
                        db.close();
                    }
                });
            } else {
                res.status('200');
                res.json({
                    result: 'ERROR_2',
                    resson: '#_2 Not exit!'
                })
            }
        });
    });

       async的git地址:https://github.com/caolan/async/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用Node操作MongoDB数据库进行注册和登录功能,你需要遵循以下步骤: 1. 安装依赖:使用npm或yarn安装Node.js和MongoDB驱动程序。 2. 启动MongoDB:确保MongoDB服务器正在运行,并且你有访问权限。 3. 连接到数据库:使用MongoDB驱动程序连接到数据库。这可以通过设置MongoClient实例来实现。 4. 创建用户模型:定义用户注册和登录时需要的用户模型。这可以是一个简单的JavaScript对象,包含用户名、密码等字段。 5. 注册功能:当用户输入用户名和密码时,将其保存到数据库中。你可以使用MongoDB的insertOne或insertMany方法将用户数据插入到集合中。 6. 登录功能:当用户输入用户名和密码时,从数据库中查找具有相同用户名的记录。如果找到匹配的记录,则用户可以登录。 7. 用户验证和会话管理:可以使用jsonwebtoken或类似的库生成并验证带有权限信息的令牌。你可以将令牌存储在用户的浏览器Cookie中,以便在后续请求中进行身份验证。 8. 路由设置:使用Express或类似的框架设置路由,以便在特定的URL上处理注册和登录请求。 9. 错误处理:在处理请求过程中,验证输入的用户数据并处理任何可能的错误。例如,如果用户输入的用户名已经存在于数据库中,则返回适当的错误消息。 10. 安全性考虑:对于密码,应使用加密算法进行哈希处理,并在数据库中存储哈希值。确保使用安全的哈希算法,如bcrypt或scrypt。 这些是在Node中使用MongoDB进行注册和登录的基本步骤。你可以在此基础上构建更复杂的逻辑,如密码重置、邮箱验证等功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值