nodejs是基於chrome的V8引擎開發的
一.模塊
1.每一個模塊文件夾中,推薦都寫一個package.json文件,這個文件的名字不能改.node將自動讀取裏面的配置.
有一個main項,就是入口文件.
2.node_modules文件夾下邊的文件能夠默認讀取.
3.var foo = require("./test/foo.js");引入一個js文件.
4.var foo = require("bar");引入node_modules文件夾下的bar文件夾,不帶擴展名,說明引入的事一個文件夾.
二.npm (http://www.npmjs.com)
咱們剛纔學習了,模塊就是一些功能的封裝,因此一些成熟的,常用的功能,都有人封裝成模塊.而且放在社區中,供人免費下載.
這個偉大的社區,叫作npm.也是一個工具名字,叫 node package management.
1.npm的主要職責是安裝開發包和管理依賴項.
安裝開發包,使用npm install命令;更新,使用npm update命令.
管理依賴項,藉助package.json文件.
2.npm install silly-datetime 安裝silly-datetime , 默認安裝到node_modules文件夾下.
3.require()中的路徑,是從當前這個js文件出發,找到別人.
fs模塊讀取文件的時候,用絕對路徑,_dirname獲得當前目錄.
4.安裝 Node 模塊時,若是指定了 --save 參數,那麼此模塊將被添加到 package.json 文件中 dependencies 依賴列表中。
而後經過 npm install 命令便可自動安裝依賴列表中所列出的全部模塊。
5.初始化package.json 文件 npm init
三.ejs(後臺)模板引擎
1.//引入模塊
var ejs = require("ejs");
//模板
var string = "好高興,今天我買了iPhone<%= a %>s";
//數據
var data = {
a : 6 ,
};
//數據綁定
var html = ejs.render(string,data);
注意:underscore.js庫的模板標記和ejs模板引擎的模板標記同樣,在一塊兒使用的時候會引發模板衝突
解決辦法:修改underscore的模板標記{{ }}
<script type="text/template" id="moban">
<div class="list-group">
<a href="javascript:;" class="list-group-item active">
<h4 class="list-group-item-heading"><%= xingming%></h4>
<p class="list-group-item-text"><%= liuyan%></p>
</a>
</div>
</script>
<script type="text/javascript">
//Ajax讀取留言列表
$.get("duly", function (result) {
var json = JSON.parse(result);
var compiled = _.template($("#moban").html());
for(var i = 0; i < json.result.length ; i++){
var html = compiled({"xingming":json.result[i].xingming ,"liuyan":json.result[i].liuyan});
$("#liuyanList").append($(html));
}
})
</script>
2.jade模板引擎(本身瞭解)
四.express 4.x 框架(http://www.expressjs.com.cn/4x/api.html)
1.Web 應用
Express 是一個基於 Node.js 平臺的極簡、靈活的 web 應用開發框架,它提供一系列強大的特性,幫助你建立各類 Web 和移動設備應用。
性能
Express 不對 Node.js 已有的特性進行二次抽象,咱們只是在它之上擴展了 Web 應用所需的基本功能。
2.app.use(express.static("./public"));express中靜態文件處理,比原生nodejs簡單不少,只須要這樣一句話.
3.express與模板引擎配合,直觀清晰.
<ul>
<% for(var i=0; i<news.length; i++){%>
<li><%= news[i]%></li>
<% } %>
</ul>
//設置模板引擎,直接去Node_module文件夾中找ejs模塊.
app.set("view engine","ejs");
app.get("/",function(req,res){
//"haha"等價於"./views/haha.ejs", 用render(模板,數據)去渲染頁面.
res.render("haha",{
news:["我是模板引擎","我很好","哈哈哈"],
});
});
4.路由
//當訪問網址的時候,能作什麼:
app.get(網址,function(req,res){
});
app.post(網址,function(req,res){
});
//若是想處理這個網址的任何method的請求,寫all();這裏的網址不分大小寫
//全部的GET參數(?號後面的內容就是參數),都已經被忽略,錨點#也被忽略
app.all(網址,function(req,res){
});
5.中間件
路由get,post這些東西,就是中間件,中間件講究順序,匹配上第一個以後,就不會日後匹配了,next函數才能繼續匹配.
app.use()也是一箇中間件.與get和post不一樣的是.他的網址不是精確匹配的,而是可以有小文件夾擴展的.
6.get請求和post請求的參數
get請求的參數在URL中,在原生node中,須要使用URL模塊來識別參數字符串.在express中,不須要使用url模塊了.能夠直接使用req.query對象獲得;
app.get('/admin', function (req,res) {
//req.query獲得的是請求的參數
console.log(req.query);
});
post請求在express中不能直接得到,必須使用body-parser模塊.使用後,將能夠用req.body獲得參數.
可是若是表單中含有文件上傳,那麼還須要使用formidable模塊.
app.use(bodyParser.urlencoded({ extended: false }));
app.post('/',function (req, res) {
console.log(JSON.stringify(req.body));
});
和Itcsat相比,
Itcsat2是先後端分離,前端頁面靜態化
7.express中的cookie和session(須要引入cookie-parser模塊)
五.underscore是一個js庫.在項目中用它是呈現模板的,讓先後端實現分離,靜態化前端模板
<body>
<div class="container">
</div>
//這個就是模板的內容
<script type="text/template" id="newsList">
<div class="jumbotron">
<h1><%= biaoti%></h1>
<p>時間:<%= shijian%> 做者:<%= zuozhe%></p>
<p><%=jianjie%></p>
<p><a class="btn btn-primary btn-lg" href="/news/<%= id%>" role="button">Learn more</a></p>
</div>
</script>
<script src="js/jquery-1.9.1.min.js"></script>
<script src="js/underscore-min.js"></script>
<script type="text/javascript">
//獲得模板內容
var mobanstring = $("#newsList").html();
//模板函數
var compiled = _.template(mobanstring);
$.get("/news",function(data,status){
for(var i = 0 ; i < data.length ; i++){
//給模板編輯傳遞值
var compiledString = compiled(data[i]);
//把生成的HTML內容追加到頁面上
$(".container").append(compiledString);
}
});
</script>
</body>
六. MongoDB數據庫(cls命令清屏)
1.運行mongo命令,進到安裝目錄下的bin文件夾,或者是配置環境變量
2.進到bin以後,開啓數據庫服務,用命令./mongod --dbpath 真實存放數據的數據庫的絕對路徑,也就是說數據庫文檔所在的文件夾.
3.用命令./mongo鏈接數據庫
4.use database 使用database(database是數據庫名稱)數據庫,建立數據庫
若是要想把這個數據庫建立成功,那麼必須插入一條數據
數據庫中不能直接插入數據,只能往集合(collections)中插入數據.集合不須要建立
db.student.insert({"name":"小花"});其中student就是一個集合
5.show dbs 顯示數據庫
6.db顯示當前使用的數據庫
show collections
顯示數據庫中全部的集合(collection)
查詢指定數據庫統計信息
db.stats()
7.mongoimport命令
mongoimport --db test --collection student --drop --file stu.json
--db test 想往哪一個數據庫中導入數據
--collection student 想往數據庫中的哪一個集合導入數據
--drop 導入以前把集合清空
--file stu.json 要導入的json文件
MongoDB的基本命令
use 命令
MongoDB use DATABASE_NAME 用於建立數據庫。該命令將建立一個新的數據庫,若是它不存在,不然將返回現有的數據庫。
dropDatabase() 方法
MongoDB 的 db.dropDatabase() 命令是用來刪除一個當前鏈接服務的數據庫。
drop() 方法
MongoDB 的 db.collection.drop() 是用來從數據庫中刪除一個集合。其中collection就是那個集合的名稱.
insert() 方法
db.teacher.insert({"name":"xiaozhang","kemu":"shuxue"});
要插入數據到 MongoDB 集合,須要使用 MongoDB 的 insert() 或 save() 方法。
update()方法
sjpwd({"name":"小紅"},{$set:{"id":2}});
更新文檔
find() 方法
db.teacher.find();
要從MongoDB 查詢集合數據,須要使用MongoDB 的 find() 方法。
pretty() 方法
db.teacher.find().pretty();
結果顯示在一個格式化的方式,可使用 pretty() 方法.
Limit() 方法
skip() 方法
db.teacher.find().pretty().limit(1);
要限制 MongoDB 中的記錄,須要使用 limit() 方法。 limit() 方法接受一個數字型的參數,這是要顯示的文檔數。
skip() 方法接受一個數字型的參數,這是要略過的文檔數。
語法:
limit() 方法的基本語法以下
>db.COLLECTION_NAME.find().limit(NUMBER)
MongoDB 數據轉儲
建立備份MongoDB中的數據庫,應該使用mongodump命令。
mongodump命令的基本語法以下:
>mongodump
恢復數據
恢復備份數據使用MongoDB 的 mongorerstore 命令。此命令將恢復全部的數據從備份目錄。
語法:
mongorestore命令的基本語法
>mongorestore
七.cookie和session,加密
1.cookie的使用,須要引包cookie-parser
var express = require("express");
var cookieParser = require("cookie-parser");
var app = express();
//使用cookie-parser 中間件
app.use(cookieParser());
app.get('/', function(req, res) {
//設置cookie
res.cookie("xihao","tybody",{maxAge:900000,httpOnly:true});
res.send(req.cookies);
})
app.get("/xihao", function (req,res) {
//獲得get 請求
var xh = req.query.xh;
//記錄用戶喜愛
var xhArr = req.cookies.xh || [];
xhArr.push(xh);
//設置cookie
res.cookie("xh",xhArr,{maxAge:900000,httpOnly:true});
res.send("喜愛:" + xhArr);
});
2.session的使用,須要引包express-session
var express = require("express");
var session = require("express-session");
var app = express();
//設置seddion中間件
app.use(
session({
secret:'keyboard cat',
resave:false,
saveUninitialized:true
})
);
app.get("/",function(req,res){
if(req.session.login == "1"){
res.send("歡迎"+req.session.username);
}else {
res.send("你尚未登陸");
}
});
app.get("/login", function (req,res) {
//設置session
req.session.login = "1";
req.session.username = "kaola";
res.send("你已經登陸成功");
});
app.listen(3000);
3.加密(引包crypto)
var crypto = require("crypto");
module.exports = function (mingma) {
var md5 = crypto.createHash("md5");
var password = md5.update(mingma).digest("base64");
return password;
}
var password = md5(req.query.password);
八.圖片處理
第一步: 首先要安裝GraphicsMagick 這個服務
第二步: 在nodejs中引gm包
只須要這兩不就能夠完成經常使用的圖片操做了.javascript