zoukankan      html  css  js  c++  java
  • nodejs

    nodejs Express框架

    npm install --save express
    --save 表示自动修改 pakage.json

    var express = require("express");
    var app = express();
    app.get("/",function(req,res){
    	res.sed("nihao");
    })
    app.get("/haha",function(req,res){
    	res.sed("这是haha页面");
    })
    app.get(/^/student/([d]{10})$/,function(req,res){
    	 res.send("学生信息,学号" + req.params[0]);
    });
    app.get("/teacher/:gonghao",function(req,res){
    	res.send("老师信息,工号" + req.params.gonghao]);
    })
    app.listen(3000);
    

    静态文件处理

    var express = require("express");
    var app = express();
    app.use(express.static("./public"));
    app.get("/haha",function(req,res){
    	res.send("haha");
    });
    app.listen(3000);
    

    Express 模板引擎 haha.ejs

    var express = require("express");
    var app = express();
    app.set("view engine","ejs");
    app.get("/",function(req,res){
    	res.render("haha",{
    		"news":["我是小新闻啊","我也是啊","哈哈哈哈"]
    	})
    })
    app.listen(3000);
    

    路由Router

    正则表达式中,未知部分用圆括号分组,然后可以用

    req.params[0], [1] 得到 req.params 类数组对象。

    :是更推荐的东西

    app.get("网址",function(req,res){
    	
    });
    app.get(/^/student/([d]{10})$/,function(req,res){
    	 res.send("学生信息,学号" + req.params[0]);
    });
    app.get("/student/:id",function(req,res){
    	var id = req.params["id"];
    	var reg = /^[d]{6}$/;
    	if(reg.test(id)){
    		res.send(id);
    	}else{
    	   res.send("请检查格式");
    	}
    });
    app.get("/:username/:oid",function(req,res){
    	var username = req.params["username"];
    	var oid = req.params["oid"];
    	ren.write("username");
    	ren.end("oid");
    })
    app.post("网址",function(req,res){
    	
    });
    如果想处理这个网址的任何method请求,那么写 all
    app.all()
    

    router 案例,restful路由设计

    var express = require("express");
    var app = express();
    //设置模板引擎
    app.set("view engin","ejs");   //.ejs模板
    app.get("/",function(req,res){
    	res.render("form");
    });
    app.post("/",function(req,res){
    	//将数据添加进入数据库
    	res.render("成功");
    });
    app.listen(3000);
    

    中间件(水流从上往下流动) 如果get post 没有 next参数, 那么就匹配到第一个路由就不往下匹配了。

    下面两个路由看似没有关系,但是实际上冲突了,匹配到第一个就不会往下匹配了

    1.更换位置

    2.next()

    3.use() 中间件, 他的网址不是精确匹配,而是拓展。

    var express = require("express");
    var app = express();
    var a = 100;
    app.get("/:username/:id",function(req,res,next){
    	var username = req.params.username;
    	//检索数据库,如果username不存在,那么next()
    	if(username){
    		res.send("用户信息");
    	}else{
    		next();
    	}
    });
    app.get("/admin/login",function(req,res){
    	a++;
    	res.render(a.toString()+"2");
    });
    app.use("/admin",function(req,res){
        res.send("你好");
    	console.log(req.originalUrl+"
    "); // '/admin/new'
    	console.log(req.baseUrl); // '/admin'
    	console.log(req.path); // '/new' 
    	res.write(req.originalUrl+"
    ");
    	res.write(req.baseUrl+"
    ");
    	res.write(req.path+"
    ");
    });
    app.use("/"); // 拦截任何网址。
    // 当不写路径的时候,实际上相当于 "/".
    app.use(function(req,res,next){
    	console.log(new Date());
    })
    app.listen(3000); 
    

    app.use()使用 给了我们增加一些特定功能的场所

    app.use(haha); //可以省掉 “/” app.use("/");
    app.listen(3000);
    function haha(req,res){
    	var filePath = req.originalUrl;
    	//根据当前网址,读取public文件夹
    	//如果有这个文件,那么渲染这个文件
    	//如果没有这个文件,那么 next();
    	fs.readFile("./public/"+filePath",function(){
    		if(err){
    			//文件不存在
    			next();
    			return;
    		}
    		res.send(data.toString());
    	});
    }
    

    express 的静态资源服务

    var express = require("express");
    var app = express();
    //静态服务  开放 public
    app.use("/jingtai",express.static("./public"));
    //新的路由
    app.get("/",function(req,res){
    	res.send("哈哈");
    })
    app.listen(3000);
    

    render 呈递模板引擎 和send() 只能用一次,可以自动设置

    var express = require("express");
    var app = express();
    app.set("views","a");
    app.set("view engine","ejs");
    app.get("/",function(req,res){
    	res.render("haha",{news:[]});
    });
    app.get("/check",function(req,res){
    	res.send({
    		"user":ok;
    	})
    })
    app.listen(3000);
    

    get和post

    var express = require("express");
    var app = express();
    app.get("/",function(req,res){
    	console.log(req.query); // 参数
    	res.send();
    })
    app.listen(3000);
    
    var express = require("express");
    var app = express();
    app.set("view engin","ejs");
    var bodyParser = require('body-parser');
    app.use(bodyParser.urlencoded({extend:false}));
    app.post("/",function(req,res){
    	res.setHeader('Content-Type','text/plain')
    	console.log(req.body); // 参数
    })
    app.listen(3000);
    

    Ajax 前后端交换原理

    public文件 里面含有 content.html页面

    content.html
    jquery 发送 Ajax请求。
    <script>
       $.get("/news",function(data,status){
    	   
       })
    </script>
    app.js
    var express = require("express");
    var app = express();
    var shujuku = [
    	
    ];
    app.use(express.static("./public"));  //开放public文件夹
    app.get("/news",function(req,res){
    	res.json(shujuku);
    })
    app.listen(3000);
    

    noSQL Mongodb

    Dao层封装 db.js

     var mongodb = require('mongodb').MongoClient;
     // 封装成内部函数
     function __connectDB(callback){
    	 var url = "mongodb://localhost:27017/haha";
    	 //连接数据库
    	 MongoClient.connect(url,function(err,db){
    		 callback(err,db);
    	 });
     }
     export.insertOne = function(collectionName,json,callback){
    	 __connectDB(function(err,db){
    		 db.collection(collectionName).insertOne(json,function(err,result){
    			 callback(err,result);
    			 db.close(); //关闭数据库
    		 });
    	 })
     };
    //__connectDB(function(err,db){
    	 //表示连接成功之后做的事情
    //}); 
    

    调用,使用封装

    var express = require("express");
    var app = express();
    var db = require("./module/db.js");
    app.get("/",function(req,res){
    	db.insertOne("teacher",{"name":"小红"},function(err,result){
    		   if(err){
    			   console.log("插入失败");
    			   return;
    		   }
    		   res.send("插入成功");
    	})
    })
    

    mongoose 简介, 将javaScript对象与数据库产生关系的一个框架,通过操作

    对象操作数据库 npm install mongoose

    // 引包
    var mongoose = require('mongoose');
    //连接数据库
    mongoose.connect('mongodb://localhost/haha');
    //创建了一个模型。猫的模型。所有的猫,都有名字,是字符串 "类"
    var Cat = mongoose.model('Cat',{name:String});
    //实例化一只猫
    var kitty = new Cat({name:'Zildjian'});
    //调用这只猫的save方法,保存这只猫。
    kitty.save(function(err){
    	if(err)
    	console.log('meow');
    })
    
    
  • 相关阅读:
    ZRender实现粒子网格动画实战
    线段树专题—ZOJ1610 Count the Colors
    LeetCode Recover Binary Search Tree
    Android跨进程訪问(AIDL服务)
    刘下记录:ImageView.scaleType 属性全解析(含视频)
    myeclipse解决JSP文件里script背景颜色的调整
    hdu 5381 The sum of gcd(线段树+gcd)
    newlisp HTTP Basic Authentication
    codeforces 132C Logo Turtle--- dp dfs
    python代码风格-PEP8
  • 原文地址:https://www.cnblogs.com/weichenji0/p/12619246.html
Copyright © 2011-2022 走看看