关于node.js的思考

今天写了这段用node.js驱动mongoDB访问数据库的代码

function writeDB(receivedText, time, user) {
    var db_host = ‘host‘;
    var port = 27017;
    var username = "usr";
    var pwd = "pwd";
    var db_name = "db";
    var result = "";
    var mongoClient = mongodb.MongoClient;

    mongoClient.connect(db_host, function (err, db) {
        if(err)
        {
            console.log("error-1" + err);
        }
        result += "DB connected.\n";
        console.log(result);

        db.authenticate(username, pwd, function (err, res) {
            if(err)
            {
                console.log("error0" + err);
            }
            result += "DB authenticated.\n";
            console.log(result);

            db.collection(‘note‘).insert({
                "text": receivedText,
                "time": time,
                "user": user
            }, function(err, res){
                if(err)
                {
                    console.log("error1" + err);
                }
                result += "data successfully written.";
                console.log(result);
                db.close();
                console.log("closed");
                return result;
            });
        });
        console.log("function1");
    });
    console.log("function2");
    return result;
}

调用方法为

    var dbResult = writeDB(receivedText, getTime(), "default user");
    console.log(dbResult);
    console.log("finished");
    res.send("succedded");

在实际运行中,log的显示结果为:

function2

finished
DB connected.

function1
DB connected.
DB authenticated.

DB connected.
DB authenticated.
data successfully written.
closed

也就是说,每次在数据库函数中执行callback函数的时候,都会认为这个函数已经执行结束了,继续执行该函数下面的语句,同时执行callback函数。

时间: 2024-12-15 17:54:59

关于node.js的思考的相关文章

由Node.js事件驱动模型引发的思考

引言 近段时间听说了Node.js,很多文章表述这个事件驱动模型多么多么优秀,应用在服务器开发中有很大的优势,本身对此十分感性去,决定深入了解一下,由此也引发了一些对程序设计的思考,记录下来. 什么是Node.js Node.js在官网上是这样定义的:"一个搭建在Chrome JavaScript运行时上的平台,用于构建高速.可伸缩的网络程序.Node.js采用的事件驱动.非阻塞I/O模型使它既轻量又高效,是构建运行在分布式设备上的数据密集型实时程序的完美选择." Node.js的事件

对Node.js的异步机制的思考

Node.js的异步机制是其最大的特色,异步可以应对高并发,具有很好的性能. 但是如果在某个方法里,涉及到数据库的多层查询,异步机制反而成为阻碍.当执行完第一层SQL后,根据所得的结果集(rows)进行结果集进行遍历时,每次遍历的结果作为where条件再执行下一层SQL时,下一层及以后的SQL并不会执行,而是在结果集(rows)遍历到最后时,才执行下一层SQL. 这时,若SQL只有两三层,其实倒还好,可以合并SQL:但是SQL层数多了之后,这种异步机制却是最大的阻碍.这时,就需要用到Node.j

面向Web Cloud的HTML5 App开发实战:Browser&HTML5&CSS3&PhoneGap&jQuery Mobile& WebSocket&Node.js(2天)

如何理解Android架构设计的初心并开发出搭载Android系统并且具备深度定制和软硬整合能力特色产品,是本课程解决的问题. 课程以Android的五大核心:HAL.Binder.Native Service.Android Service(并以AMS和WMS为例).View System为主轴,一次性彻底掌握Android的精髓. 之所以是开发Android产品的必修课,缘起于: 1,     HAL是Android Framework&Application与底层硬件整合的关键技术和必修技

精通Node.js: 你应该阅读的书籍

最开始的几年,在应用服务器编程领域,我存在着一个选择.那时候,我已经远离了C一些时间,喜欢上JavaScript很长时间. 我喜欢JavaScript是因为JavaScript很轻,很优雅,很容易表达我的想法.并且如果我想实现一个可视化的内容,我可以在半小时内通过HTML Css写出一个漂亮的.生动的交互工具,然后把我任何想到的东西扔进去给别人看. 我很喜欢这样写javascript,虽然我知道道上这样写:JavaScript.但是javascript这样的写法让我觉得更加的轻快,虽然javas

node.js 经验总结

1.精确版本号 "一定要精确到具体版本号!使用*直接滚,^和~都不行!",早上刚到公司,我们服务器的头头满眼血丝(估计又凌晨几点睡的),对我抱怨道:"妈蛋,以前写的代码package.json里的版本和服务器正在运行的版本不一样.安装最新的又咣咣一顿报错."此处省略几千字... 好吧.我先打自己脸.以前只会用*...大多时候也没必要写死版本号,使用^和~也可以.扫一下盲: semver node.js 中的版本管理 2.测试 一定要写测试用例.就拿我来说,我负责的那

面向Web Cloud的HTML5 App开发实战:Browser&HTML5&CSS3&PhoneGap&jQuery Mobile& WebSocket&Node.js(3天)

课程简介: 王家林老师(联系邮箱[email protected] 电话:18610086859 QQ:1740415547 微信号:18610086859) 22个HTML5主题一次性贯穿HTML5的一切技术: 一网打尽HTML5时代Device.(设备端).Browser(浏览器)和Cloud(浏览器)的所有技术: 以浏览器定制技术为基础,通晓HTML5+CSS3+PhoneGap+Web Socket +jQuery Mobile +Node.js等HTML5的六大核心技术: 最新研发的H

Node.js 面试问题及答案(2017 版)

阅读原文 两年前,我们发布了我们的第一篇关于 Node.js 面试的文章 Node.js 面试常见问题和答案,近两年,JavaScript 和 Node.js 生态系统有了很多更新和发展,因此,是该更新这些面试问题和答案的时候了. 免责声明(重要) 仅仅通过面试问题去评价一个面试者,从来都不是一个好的选择.但是这些问题可以让你大体了解面试者在 Node.js 开发上的经验. 当然,这些问题并不能全面反映一个人的思维方式和开发习惯. 我相信,开发中遇到的问题,更能反映面试者的知识水平 - 所以,我

使用Node.js+Socket.IO搭建WebSocket实时应用【转载】

原文:http://www.jianshu.com/p/d9b1273a93fd Web领域的实时推送技术,也被称作Realtime技术.这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新.它有着广泛的应用场景,比如在线聊天室.在线客服系统.评论系统.WebIM等. WebSocket简介 谈到Web实时推送,就不得不说WebSocket.在WebSocket出现之前,很多网站为了实现实时推送技术,通常采用的方案是轮询(Polling)和Comet技术,Comet又可细分为两种实现方

node.js搭建简单服务器,用于前端测试websocket链接方法和性能测试

WebSocket简介 谈到Web实时推送,就不得不说WebSocket.在WebSocket出现之前,很多网站为了实现实时推送技术,通常采用的方案是轮询 (Polling)和Comet技术,Comet又可细分为两种实现方式,一种是长轮询机制,一种称为流技术,这两种方式实际上是对轮询技术的改进,这些 方案带来很明显的缺点,需要由浏览器对服务器发出HTTP request,大量消耗服务器带宽和资源.面对这种状况,HTML5定义了WebSocket协议,能更好的节省服务器资源和带宽并实现真正意义上的