博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nodejs学习笔记
阅读量:6817 次
发布时间:2019-06-26

本文共 6810 字,大约阅读时间需要 22 分钟。

nodejs是基于chromeV8引擎开发的
.模块
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()也是一个中间件.getpost不同的是.他的网址不是精确匹配的,而是能够有小文件夹扩展的.
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中的cookiesession(需要引入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
.cookiesession,加密
   
  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
   只需要这两不就可以完成常用的图片操作了.

 

转载于:https://www.cnblogs.com/lsj-xl/p/7601489.html

你可能感兴趣的文章
取消NavigationBar左右两边的空隙
查看>>
MEMCACHE常用的命令
查看>>
Android 不显示光标或者光标颜色为白色的解决方法
查看>>
C#网络编程之---TCP协议的同步通信(二)
查看>>
thinkphp-许愿墙-3
查看>>
linux awk时间计算脚本
查看>>
杭电3635--Dragon Balls(并查集)
查看>>
npm install报错Unhandled rejection RangeError: Maximum call stack size exceededill install
查看>>
理解OAuth 2.0
查看>>
得到颜色的整形值
查看>>
.net winForm 实现类似qq 弹出新闻
查看>>
SSL加速和证书卸载的配置方式
查看>>
Intersect交集
查看>>
Sencha touch 中的一段源码匿名中定义Function并调用
查看>>
android开发学习 ------- 枚举类型在Android中的用法
查看>>
day14 装饰器模拟验证附加功能
查看>>
c#简单自定义异常处理日志辅助类
查看>>
make: *** No targets specified and no makefile found. Stop.错误
查看>>
闭包的常见用处
查看>>
中联通4月份3G用户净增181.7万总数突破2000万
查看>>