什么是MEAN?JavaScript編程中的MEAN是什么意思?
前段日子看到一篇文章提到MEAN這個(gè)詞,什么是MEAN?
其實(shí)MENA就是 MongoDB(非關(guān)系數(shù)據(jù)庫(kù)) + Express(模板引擎) + AngularJS(MVC javascript庫(kù)) + NodeJS(服務(wù)器腳本)的簡(jiǎn)稱。
它們共同構(gòu)造 基于 javascript 的 現(xiàn)代web應(yīng)用全棧開(kāi)發(fā)工具。
MongoDB:
是一種強(qiáng)大、靈活、可擴(kuò)展的數(shù)據(jù)存儲(chǔ)方式。
它擴(kuò)展了關(guān)系型數(shù)據(jù)庫(kù)的眾多有用功能,如輔助索引、范圍查詢、和排序、它內(nèi)置的對(duì)MapReduce式聚合的支持和對(duì)地理空間索引的支持。
它將傳統(tǒng)數(shù)據(jù)庫(kù)行(row)的概念換成,文檔(document)模型,所謂文檔模型其實(shí)就是一個(gè)數(shù)組對(duì)象。
我們來(lái)看一下文檔模型:
{“_id” : 1 , “greeting” : “hello,world!” , “foo” : 3}
每個(gè)文檔都會(huì)帶有一個(gè)_id的字段,該文檔模型代表數(shù)據(jù)庫(kù)中有一條記錄,包含字段 greeting , foo 和 _id;
Express:
關(guān)于末班引擎Express,我想用按句話來(lái)描述它:
是一個(gè)簡(jiǎn)潔而靈活的node.jsWeb應(yīng)用框架, 提供一系列強(qiáng)大特性幫助你創(chuàng)建各種Web應(yīng)用。
豐富的HTTP工具以及來(lái)自Connect框架的中間件隨取隨用,創(chuàng)建強(qiáng)健、友好的API變得快速又簡(jiǎn)單
Express 不對(duì) node.js 已有的特性進(jìn)行二次抽象,我們只是在它之上擴(kuò)展了Web應(yīng)用所需的功能
AngularJS:
AngularJS是由google開(kāi)發(fā)的一款js庫(kù),它與backone一樣同為MVC腳本庫(kù)。
幾乎每種語(yǔ)言的第一課都是講hello world,按照慣例我們也來(lái)一個(gè):
<!doctype html>
<html ng-app>
<head>
<script src="http://code.angularjs.org/angular-1.0.1.min.js"></script>
</head>
<body>
Hello {{'World'}}!
</body>
</html>
<html ng-app>
聲明了該頁(yè)面使用angularJS,當(dāng)加載該頁(yè)時(shí),標(biāo)記ng-app告訴AngularJS處理整個(gè)HTML頁(yè)并引導(dǎo)應(yīng)用。
這個(gè)例子在頁(yè)面打印hello world,有的人就奇怪了,hello world搞這么復(fù)雜干嘛。
其實(shí){{}}里內(nèi)容是一種數(shù)據(jù)綁定的形式,看完下個(gè)例子你就知道它的強(qiáng)大之處了。
我門(mén)接著看下一個(gè)例子:
<!doctype html>
<html ng-app>
<head>
<script src="angular-1.0.1.min.js"></script>
</head>
<body>
Your name: <input type="text" ng-model="yourname" placeholder="World">
<hr>
Hello {{yourname || 'World'}}!
</body>
</html>
在瀏覽器里打開(kāi)這個(gè)頁(yè)面,然后試著在輸入框輸入隨意字符,你會(huì)發(fā)現(xiàn)這些輸入的字符立即更新顯示在問(wèn)候語(yǔ)中。 是不是很神奇?
的念。 輸入框的任何更改會(huì)立即反映到模型變量(一個(gè)方向),模型變量的任何更改都會(huì)立即反映到問(wèn)候語(yǔ)文本中(另一方向)。
該示例有一下幾點(diǎn)重要的注意事項(xiàng):
1. 文本輸入指令<input ng-model=”yourname” />綁定到一個(gè)叫yourname 的模型變量。
2. 雙大括號(hào)標(biāo)記將yourname 模型變量添加到問(wèn)候語(yǔ)文本。
3. 你不需要為該應(yīng)用另外注冊(cè)一個(gè)事件偵聽(tīng)器或添加事件處理程序!
NodeJS
是由Ryan Dahl開(kāi)發(fā)的一款高性能服務(wù)器js平臺(tái)。
它是集于V8引擎開(kāi)發(fā)的,V8引擎是google開(kāi)發(fā)的 javascript引擎,不是汽車(chē)的V8引擎 – -是一款高性能引擎,它的性能遠(yuǎn)遠(yuǎn)超越其他腳本語(yǔ)言。
nodeJS使用的是 異步I / O的通信方式,這種方式和AJAX很類(lèi)似:
$.post("url", {title:"post請(qǐng)求"}, function(data){
console.log("收到響應(yīng)");
})
console.log("發(fā)送ajax結(jié)束");
nodejs的請(qǐng)求方式:
var fs = require('fs');
fs.readFile("/path", function(err, file){
console.log("讀取文件完成");
});
console.log("發(fā)起讀取文件");
我們?cè)倏聪旅孢@個(gè)例子:
當(dāng)同時(shí)執(zhí)行兩個(gè)請(qǐng)求的時(shí)候,總耗時(shí)取決于耗時(shí)最多的那個(gè),而不是兩個(gè)請(qǐng)求的耗時(shí)總和,因?yàn)樗麄儍蓚€(gè)是并行的。
//第一個(gè)請(qǐng)求
var fs = require('fs');
fs.readFile("/path1", function(err, file){
console.log("讀取文件1完成");
});
//第二個(gè)請(qǐng)求
fs.readFile("/path2", function(err, file){
console.log("讀取文件2完成");
});
console.log("發(fā)起讀取文件");
nodejs高性能的另一個(gè)原因是基于事件驅(qū)動(dòng):
node將前端瀏覽器中的 事件 引入后端,配合異步I/O,將事件點(diǎn)暴露給業(yè)務(wù)邏輯。
事件的變成方式具有輕量級(jí),松耦合,只關(guān)注事物點(diǎn)等優(yōu)勢(shì)。
相關(guān)文章
node.js 微信開(kāi)發(fā)之定時(shí)獲取access_token
本文給大家分享的是在使用node.js做微信開(kāi)發(fā)的過(guò)程中如何定時(shí)獲取access_token的方法,有需要的小伙伴可以參考下2020-02-02VsCode無(wú)法識(shí)別node問(wèn)題解決過(guò)程
這篇文章主要給大家介紹了關(guān)于VsCode無(wú)法識(shí)別node問(wèn)題解決的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2023-07-07express提供http服務(wù)功能實(shí)現(xiàn)示例
這篇文章主要為大家介紹了express提供http服務(wù)功能實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10Node.js本地搭建簡(jiǎn)單頁(yè)面小游戲的過(guò)程
Node.js是能夠在服務(wù)器端運(yùn)行 JavaScript 的開(kāi)放源代碼、跨平臺(tái)運(yùn)行環(huán)境,Node.js 大部分基本模塊都用 JavaScript 語(yǔ)言編寫(xiě),下面將介紹如何簡(jiǎn)單幾步實(shí)現(xiàn)遠(yuǎn)程公共網(wǎng)絡(luò)下訪問(wèn)windwos node.js的服務(wù)端2024-01-01