zoukankan      html  css  js  c++  java
  • express环境搭建(2018/11/09)

    一、express环境搭建 
    1. express web框架:基于node.js平台,快速,开放,极简的web开发框架http://www.expressjs.com.cn/
             使用前需要进行安装  cnpm install express --save
          2.安装步骤
                    新建一个文件夹 双击文件夹 
                     在cmd中  npm init -y // 初始化文件夹
                     cnpm install express --save // 安装express框架
          3.向根目录中填入内容
    const express = require("express")//引入express框架
    var app = express();//实例化   实例过程已经在内部封装好了可以直接用
    app.get("/",(req,res)=>{//请求根目录  用send向根目录中传值
           res.send("hello world")
    })
    var ser = app.listen(3000,()=>{
           console.log("listen 3000...")
    })
     
     

    二、路由
    路由:根据不同的url返回不同的内容(localhost:3000       localhost:3000/one)
    const express = require("express")//引入express框架
    var app = express();//实例化   实例过程已经在内部封装好了可以直接用
    app.get("/",(req,res)=>{//请求根目录  用send向根目录中传值
           res.send("hello world")
    })
    app.get("/one",(req,res)=>{//路由 第一个参数就是我要向其中传递数据的url
           res.send("one request")
    })
    var ser = app.listen(3000,()=>{
           console.log("listen 3000...")
    })
    甩端口:res.json()   用户在url根目录后输入一个/aaa的时候就可以拿到data.json中的数据
    const express = require("express")//引入express框架
    var app = express();//实例化   实例过程已经在内部封装好了可以直接用
    var data = require("./data")//引入data.json这个文件
    app.get("/aaa",(req,res)=>{//第一个参数是端口号 是后端设置的端口号,前端想要获取到data中的数据需要在url地址中输入这个端口号才可以获取到data.json中的数据
           res.json(data);//这个data是data.json
    })
    var ser = app.listen(3000,()=>{
           console.log("listen 3000...")
    })
     

     
    ejs 模板引擎(template): 所谓模板就是html中加入了变量,使用的时候将变量替换成常量了 //就好比PPT模板 你下载使用ppt模板的时候可以改变模板中的内容
    <body>
    <%=a%>//变量
    姓名 {name}  年龄 {age}
    </body>
    使用方法
                        1.安装:cnpm install ejs --save  //使用前先进行安装
                        2.使用什么模板引擎 : app.set("view enigne","ejs")//第二个参数是使用的模板引擎类型
                           模板引擎放在哪 :    app.set("views","./views")//默认放在views文件夹内 需要自己手动创建views文件夹   第二个参数是文件夹路径,可以改变 eg:./title
                        3.在views中新建一个文件,文件的扩展名要叫 .ejs 然后在文件内部写html格式的内容
     //渲染模板
    res.render(ejs模板文件的文件名,{
      ejs文件里的变量名:“值”
    }
    a.ejs
    <!DOCTYPE html>
    <html>
           <head>
                  <meta charset="UTF-8">
                  <title></title>
           </head>
           <body>
                  <%=title%>//这个是变量
           </body>
    </html>
     
    hello.js
    const express = require("express")//引入express框架
    var app = express();//实例化   实例过程以及在内部封装好了可以直接用
    var data = require("./data")
    app.set("view engine","ejs")
    app.set("views","./views")
    app.get("/",(req,res)=>{//请求根目录  用send向根目录中传值
           res.send("hello world")
    })
    app.get("/one",(req,res)=>{//路由 第一个参数就是我要向其中传递数据的url
           res.render("a",{//渲染页面
                  title:"aaaaa"//向ejs中的title变量传值
           })
    })
    var ser = app.listen(3000,()=>{
           console.log("listen 3000...")
    })
     
     
     

     
    四、ejs数据列表:    在ejs文件中用js语句写for循环,遍历json数据产生一个数据列表
    1. <% %>      //用来执行javascript代码
    2. <%=变量的名字%>      //模板中输出变量
    3. <%- %>   //变量直接输出,能够直接解析html中的写法
          4. <% include 模板的路径 %>    //模板嵌套
    b.ejs
    <body>
                               <% include ./myheader%>//添加公共头部 会在不同页面的头部显示同样的内容   模板嵌套
                  <ul #BC0058"><%=flag?'red':'blue'%>">//条件运算符
                         <% for(var i=0 ;i<list.length;i++){ %>//js内容的拼接  ejs的数据列表写法
                           <li><%=list[i].id%>  <%=list[i].name%></li>
                         <% }  %>
                  </ul>
           </body>
     
    hello.js
    app.get("/thr",(req,res)=>{
           res.render("b",{
                  flag:true
                  list:[
                  {"id":1, "name":"<h3>zzz</h3>"//ejs接收这个数据需要使用<%-list[i].name%> }//注意是<%- %>
                  ]
           })
    })
    myheader.js
    <div>
    这是公共的头部
    </div>
     

    五、添加数据  ( 写一个input框 输入内容回车的时候将内容发送给服务端 服务端将数据存储到json中然后再利用循环将数据填入ejs中的列表里  )
    ejs 文件中需要引入jquery https://www.bootcdn.cn/
    const data  如果 data指向一个值 那不能被改变 如果data指向一个对象 那么可以被改变
    b.ejs
           <body>
                  <% include ./myheader.ejs %>
                  <input type="text" id="txt">
           
                  <ul>
                         <%for(var i=0 ;i<list.length;i++){%>
                           <li><%=list[i].id%>  <%=list[i].name%></li>
                         <%}%>
                  </ul>
                  
           </body>
    </html>
    <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
    <script type="text/javascript">
           $("#txt").keyup((e)=>{
                         if(e.keyCode===13){
                                if($("#txt").val()===""){
                                      return
                                      }
                                $.get("http://localhost:3000/add",{//发送请求
                                       xm:$("#txt").val()
                                }).then((res)=>{
                                      location.reload();
                                })
                         }
              })
    </script>
     
     
    hello.js
    const url = require("url")
    const fs = require("fs")
    app.get("/thr",(req,res)=>{
           res.render("b",{
                  list:data.list
           })
    })
    app.get("/add*",(req,res)=>{
           //接受用户传过来的值  用url模块
           var obj = url.parse(req.url,true);
           var name = obj.query.xm;
           data.list.push({//接受用户传来的值
                  id:++data.count,
                  name:name
           })
           fs.writeFileSync("./data.json",JSON.stringify(data));//插入到文件当中去
           res.render("b",{//重新渲染模板
                  list:data.list
           })
    })
    app.get("/aaa",(req,res)=>{
           res.json(data);
    })
    var ser = app.listen(3000,()=>{
           console.log("listen 3000...")
    })
     
     
    六、删除数据
    params是参数的意思
    req.params.参数名
    filter() 用于删除
    b.ejs
    $(".btn").click(function(){
                  if(!confirm("确定要删除吗"))return;
                $.get("http://localhost:3000/del/"+$(this).attr("data-id")).then((res)=>{//  $(this).attr("data-id")取到的是点击时的id
                         location.reload();
                  })
           })
    hello.js
    app.get("/del/:id",(req,res)=>{     //ejs中$(this).attr("data-id")的值会传给:id
           var id = Number(req.params.id);       //把id转成数值型   如果不转的话 id是string型
           data.list = data.list.filter((item)=>{      // 删除操作    filter按照某个条件过滤,返回的是所有符合条件的元素  
                  console.log(typeof item.id)
                  return item.id !==id;         //对item.id进行遍历如果item的id不等于传过来的id值那么就把这条item.id留下来,如果item的id等于传过来的id就把它删除
           })
           fs.writeFileSync("./data.json",JSON.stringify(data));  //将json转化成json字符串   json.parse是将json字符串转化成json对象
           res.render("b",{
                  list:data.list
           })
    })
     
    七、查询数据
     
    includes() //返回布尔值 true/false  模糊查找
    query.ejs
    <body>
       <% include ./myheader.ejs %>
       <input type="text" id="txt" /> <button id="btn">查找</button>
            <%=list.length%><!--显示查找到的条数-->
           <ul>
                   <% for(var i=0;i<list.length;i++){ %>
                         <li><%=list[i].id%> <%-list[i].name%>           
                         </li>
                  <% } %>
           </ul>
           <script>
           $("#btn").click(function(){
                  $.get("http://localhost:3000/query/"+$("#txt").val()).then((res)=>{//传递输入框中的值
                                location.reload();   
                  })
           })
           </script>
    </body>
     
     
    hello.js
    var mylist =[];
    app.get("/querypage",(req,res)=>{//展示查询页面
           res.render("query",{//渲染query模板
                  list:mylist//让list中的数据等与mylist中的数据
           })
    })
    app.get("/query/:kw",(req,res)=>{//展示查询结果  :kw为查询的关键字keyword
           mylist=data.list.filter((item)=>{
                  return item.name.includes(req.params.kw);//将前端传过来的$("#txt").val()看作是kw 然后看list.name中包不包含这个kw,返回包含kw的数组
           })
           res.render("query",{
                  list:mylist
           })
    })
     
    八、修改数据
    b.ejs
    <body>
                  <% include ./myheader.ejs %>
                  <input type="text" id="txt">
           
                  <ul>
                         <%for(var i=0 ;i<list.length;i++){%>
                           <li><%=list[i].id%>  <%=list[i].name%>
                                <button data-id="<%=list[i].id%>"class="btn" >删除</button>
                                <button data-id="<%=list[i].id%>" class="modify">修改</button>
                           </li>
                         <%}%>
                  </ul>
                  
           </body>
    </html>
    <script type="text/javascript">
           $("#txt").keyup((e)=>{
                         if(e.keyCode===13){
                                if($("#txt").val()===""){
                                      return
                                      }
                                $.get("http://localhost:3000/add",{//发送请求
                                       xm:$("#txt").val()
                                }).then((res)=>{
                                      location.reload();
                                })
                         }
              })
           
           $(".btn").click(function(){
                  if(!confirm("确定要删除吗"))return;
                  $.get("http://localhost:3000/del/"+$(this).attr("data-id")).then((res)=>{//  $(this).attr("data-id")取到的是点击时的id
                         location.reload();
                  })
           })
           
           $(".modify").click(function(){//点击修改按钮跳转到修改页面 
                  location.href="http://localhost:3000/modify/"+$(this).attr("data-id") //modify/+点击按钮的id
           })
    </script>
     
    modify.ejs
    <body>
           <input type="text" name="xm" id="xm" value="<%=xm%>" />
           <input type="hidden" name="id" id="id" value="<%=id%>" />
           <button id="modifyok">修改</button>
    </body>v
    </html>
    <script type="text/javascript">
           $("#modifyok").click(function(){
                  location.href="http://localhost:3000/modifyok/"+$("#xm").val()+"/"+$("#id").val();//跳转到修改好后的页面
           })
    </script>
     
    hello.js
    app.get("/modify/:id",(req,res)=>{//修改界面页面
           var id = Number(req.params.id);
           var list = data.list.filter((item)=>{
                  return item.id == id
           })
           res.render("modify",{
                  xm:list[0].name,//因为每次只修改一条内容 所以list中只有一条数据
                  id:list[0].id
           })
    })
    app.get("/modifyok/:name/:id",(req,res)=>{//修改后的页面
           var id = Number(req.params.id);
           var name = req.params.name;
           data.list.forEach((item)=>{
                  if(item.id===id){
                         item.name = name
                  }
           })
           fs.writeFileSync("./data.json",JSON.stringify(data));
           res.render("b",{
                  list:data.list
           })
    })
     
  • 相关阅读:
    Useful for Android the development engineer from Github
    Compile a native C Android application
    android-non-ui-ui-thread-communications-part-5-5
    android-non-ui-to-ui-thread-communications-part-4-of-5
    Android Non-UI to UI Thread Communications(Part 3 of 5)
    webpack 配置的相关标准化
    eslint 配置规则
    移动端自己实现table的思路
    前端 转pdf的方法
    关于git 提交的一些规范
  • 原文地址:https://www.cnblogs.com/zsrTaki/p/11510340.html
Copyright © 2011-2022 走看看