node.js到底是啥
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了node.js到底是啥相关的知识,希望对你有一定的参考价值。
我现在只知道他本身是用C++开发的,但是它是什么,是开发平台?是运行环境?是新的语言? 据我观察 这应该不是新的语言吧。其他的话,它是基于什么语言开发东西呢?
求简洁明了的正确答案。高分拜上!
还想了解一下node的发展前景,有了解的能帮忙说一下吗?node和php哪个更有发展前途,可能问题有点幼稚,但是真心请各位耐心指教
回答很到位,我喜欢,嘿嘿……能再说一下node.js的发展前景吗?兴趣在PHP,现在刚接触到这个node,值得今后改变方向吗?搞这个有多大前途?
追答要说发展前景. 目前全世界范围内都在推行html5, 在HTML5的影响下现在javascript越来越流行. 而且google和mozilla都在不断的提高自身javascript引擎的运行效率. 再加上它自身可以作为框架进行二次编译. 前景还是乐观的, 实际上是个挺牛逼的创意. 它本身可以作为HTTP Server使用, 不像PHP必须依赖于Apache或者lighttpd+FastCGI这种模式. 它自身有一套自己的套件管理系统, 可以安装和加载第三方开发的套件. 有点类似Linux下RPM的概念或者Python加载模块的概念. 相当的好玩阿, 目前这玩意在国外火热. 而且安装简单, 上手倍儿快.
但要说为它改变方向我觉得目前还不至于, 毕竟LAMP目前依然是主流趋势. 至于未来...说不准...我目前也只是在实验它服务端这部分功能. 但如果它这东西真的又可以完全符合W3C制定的HTML5 API标准, 比如通过加载套件的方法, 而同时又可以进行服务端操作. 那真的将是非常的强悍...我建议先别考虑前途, 装个先玩着. 反正挺有意思...
补充: 可以推荐你一篇简单的教程, 从Hello World开始. 你可以先看看它的大概意思试试感觉...Learning Server-Side JavaScript with Node.js | Nettuts+ : http://net.tutsplus.com/tutorials/javascript-ajax/learning-serverside-javascript-with-node-js/
通俗的来说,Node.js就是一门”用JS语法的服务器开发语言“,所谓服务端开发语言,PHP,Java,C#都是,他们各自有各自的语法。而Javascript通常是一门运行在浏览器上的前端开发语言。
Node.js的语法上的特别之处在于,他没有自己再独创一门语言和语法,比如”Aava,Bava,Cava“之类的。他用前端语言Javascript包装了底层实现,使你能够用Javascript的语法做服务器端的开发。也就是说,你只要熟悉Javascript,你就可以像使用PHP,Java那样编写后台代码了。
至于Node.js通常适用于高并发的场景,因为它没有多线程的概念,比如你做一个写文件的操作,当一个请求执行到耗时间的写文件这一步的时候,进程会将这个操作交给后台执行,本身继续执行别的请求。这样的好处在于少了创建销毁线程的开销,使主进程永远处于满载状态。 参考技术B 回答
你好,node的中文意思是n. 茎节;结,结节;结点,节点;(尤指人体关节附近的)硬结;(计算机网络的)网点;(物理,数)波节;调和函数零点;(电流或电压)零点【名】 (Node)(法)诺德(人名)网络 节点;结点;淋巴结专业 节点 [计算机科学技术];节点 [电子、通信与自动控制技术];结点 [经济学]
参考技术C “Node 是一个服务器端 JavaScript 解释器,它将改变服务器应该如何工作的概念。它的目标是帮助程序员构建高度可伸缩的应用程序,编写能够处理数万条同时连接到一个(只有一个)物理机的连接代码。”优点:
js是跨平台的,手机、平板电脑、笔记本、个人电脑等随处可见它的身影,降低跨平台开发的难度;
Node 并不只是 Apache 的一个替代品,它旨在使 PHP Web 应用程序更容易伸缩;
Node 表现出众的典型示例包括:RESTful API、Twitter 队列、电子游戏统计数据。
综上所述,它是一种新型的应用,旨在解决某类问题,如类似ajax的出现,学会用它,可以让你的价值增倍....
参考资料:http://www.ibm.com/developerworks/cn/opensource/os-nodejs/
本回答被提问者采纳在 Node.js 中进行同步 MongoDB 查询的正确方法是啥?
【中文标题】在 Node.js 中进行同步 MongoDB 查询的正确方法是啥?【英文标题】:What is the right way to make a synchronous MongoDB query in Node.js?在 Node.js 中进行同步 MongoDB 查询的正确方法是什么? 【发布时间】:2012-08-15 08:17:53 【问题描述】:我正在使用 MongoDB 的 Node.JS 驱动程序,我想执行一个同步查询,如下所示:
function getAThing()
var db = new mongo.Db("mydatabase", server, );
db.open(function(err, db)
db.authenticate("myuser", "mypassword", function(err, success)
if (success)
db.collection("Things", function(err, collection)
collection.findOne( name : "bob", function(err, thing)
return thing;
);
);
);
);
问题是,db.open 是一个异步调用(它不会阻塞),所以 getAThing 返回“未定义”,我希望它返回查询结果。我确信我可以使用某种阻塞机制,但我想知道执行此类操作的正确方法。
【问题讨论】:
【参考方案1】:ES 6(节点 8+)
您可以使用async/await
await
操作符暂停异步函数的执行,直到 Promise 被解析并返回值。
这样您的代码将以同步方式工作:
const query = MySchema.findOne( name: /tester/gi );
const userData = await query.exec();
console.log(userData)
较旧的解决方案 - 2013 年 6 月 ;)
现在Mongo Sync 可用,这是在 Node.js 中进行同步 MongoDB 查询的正确方法。
我也在用这个。您可以编写如下同步方法:
var Server = require("mongo-sync").Server;
var server = new Server('127.0.0.1');
var result = server.db("testdb").getCollection("testCollection").find().toArray();
console.log(result);
注意:它依赖于node-fiber,并且在 Windows 8 上存在一些问题。
编码愉快:)
【讨论】:
我用 mongo-sync 编写了一个 5 行脚本,但它失败了,尽管它几乎完美地匹配了他们的测试代码。它似乎有错误。 @jcollum :您能描述一下您遇到的确切问题吗?因为它对我有用,没有大问题。如果您确定它是模块中的错误,您可以在 Repo 上提出新问题 我提交了一个错误。显然,您必须从 mongo-sync 库中的 node_modules 中删除光纤模块。看起来像是包装问题。 如果它依赖于节点光纤,那么它不是同步的【参考方案2】:没有办法在没有某种可怕的黑客攻击的情况下实现这种同步。正确的方法是让getAThing
接受一个回调函数作为参数,然后在thing
可用时调用该函数。
function getAThing(callback)
var db = new mongo.Db("mydatabase", server, );
db.open(function(err, db)
db.authenticate("myuser", "mypassword", function(err, success)
if (success)
db.collection("Things", function(err, collection)
collection.findOne( name : "bob", function(err, thing)
db.close();
callback(err, thing);
);
);
);
);
Node 7.6+ 更新
async
/await
现在提供了一种在使用返回承诺的异步 API 时以同步样式编码的方式(就像原生 MongoDB 驱动程序一样)。
使用这种方式,上面的方法可以写成:
async function getAThing()
let db = await mongodb.MongoClient.connect('mongodb://server/mydatabase');
if (await db.authenticate("myuser", "mypassword"))
let thing = await db.collection("Things").findOne( name: "bob" );
await db.close();
return thing;
然后您可以从另一个async
函数调用它作为let thing = await getAThing();
。
然而,值得注意的是MongoClient
提供了一个连接池,所以你不应该在这个方法中打开和关闭它。相反,在您的应用启动期间调用MongoClient.connect
,然后将您的方法简化为:
async function getAThing()
return db.collection("Things").findOne( name: "bob" );
请注意,我们不会在方法中调用await
,而是直接返回由findOne
返回的promise。
【讨论】:
感谢 Johnny 提供的解决方法!我希望有一个开箱即用的简单方法...即使编写一个简单的if_exists()
函数也令人沮丧...顺便说一句,如果有人知道更简单的方法或驱动程序的更新,请在此处发布。
您可以随时使用异步库,以避免识别“厄运”github.com/caolan/async 这将使代码更具可读性和美观性。
@Logan 我不会称其为“解决方法”,这就是节点的设计方式。
返回的thing
是一个'[object Promise]'。我们如何读取 Promise 对象中的数据? (没有.then
回调)
@user1063287 是的。有关更多示例,请参阅here。【参考方案3】:
虽然它不是严格同步的,但我反复采用并发现非常有用的一种模式是在异步函数上使用 co 和 promisify yield。对于 mongo,你可以重写上面的:
var query = co( function* ()
var db = new mongo.Db("mydatabase", server, );
db = promisify.object( db );
db = yield db.open();
yield db.authenticate("myuser", "mypassword");
var collection = yield db.collection("Things");
return yield collection.findOne( name : "bob" );
);
query.then( result =>
).catch( err =>
);
这意味着:
-
您可以使用任何异步库编写类似“同步”的代码
从回调中抛出错误,这意味着您不需要成功检查
您可以将结果作为承诺传递给任何其他代码
【讨论】:
以上是关于node.js到底是啥的主要内容,如果未能解决你的问题,请参考以下文章