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包 只需要这两不就可以完成常用的图片操作了.