express的学习,与使用

摘要:
2) 首先,您需要创建多个文件夹node_Modules:这里没有解释。你可以用一点。公共:在本例中,我们主要将一些css、图像和其他文件放在视图中:查看文件博客。js:主要是数据级别102。js:我的启动文件3)查看代码时,解释ever02。jsvarexpress=要求//http://www.jb51.net/article/58166.htmvarbodyParser=require ; varpath=要求;varapp=表达式();//Hbs是express的众多模板之一,谷歌可以理解。

最近在学习vue的一个实战项目,碰到一个express,当时很萌,就随便看了看................

expres是基于node 的一个web框架,

首先可以找到它的官网照着学习

这里只讲一些官网上没有的或者很晦涩的东西.........

1)模版引擎的使用

给出package.json的依赖

{
  "name": "demo",
  "version": "1.0.0",
  "description": "",
  "main": "demo01.js",
  "scripts": {
    "test": "echo "Error: no test specified" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "body-parser": "^1.18.2",
    "express": "^4.16.2",
    "hbs": "~2.3.1",
    "jade": "^1.11.0"
  }
}

你可以npm install 一下,

我这里要坐的就是使用express的路由兼模版引擎搭建一个小网站。

2)首先你的建立几个文件夹

express的学习,与使用第1张

node_modules:这个就不解释了,你稍微使用个就知道了。

public:这个里面我们主要是放些css,images等文件

views:是视图文件(主要放一些)

blog.js:主要是数据(模拟数据)

evel02.js:就是我的启动文件(大家习惯的是app.js)

3)边看代码,遍解释

evel02.js

var express= require('express');

//http://www.jb51.net/article/58166.htm
var bodyParser = require('body-parser');

var path = require('path');

var app = express();


// hbs是express的众多模版之一,可以google一下去了解。
//可以去了解:https://www.cnblogs.com/chyingp/p/hbs-getting-started.html
var hbs = require('hbs'); //设置模版引擎 app.set("view engine",'html'); app.engine("html",hbs.__express); //加载数据 var blogEngine = require('./blog'); //app.use(bodyParser()); // parse application/x-www-form-urlencoded app.use(bodyParser.urlencoded({ extended: false })); // parse application/json app.use(bodyParser.json()) ; app.get('/',function(req,res){ // res.render('index'); res.render('index', { tile:'最近的文章', entries:blogEngine.getBlogEntries() }); }); app.get('/about',function(req,res){ //res.render('about');
  //渲染页面
res.render('about',{title:"自我介绍"}); }); app.get('/article/:id',function(req,res){ //res.render('article'); var entry = blogEngine.getBlogEntry(req.params.id); res.render("article",{title:entry.title,blog:entry}); }); //制定静态文件目录 //app.use(express.static('public')); app.use(express.static(path.join(__dirname, 'public'))); //监听3000端口 app.listen(3000);

blog.js

var entries =[
  {"id":1,"title":"第一篇","body":"正文1","published":'4-1-2017'},
  {"id":2,"title":"第二篇","body":"正文2","published":'4-2-2017'},
  {"id":3,"title":"第三篇","body":"正文3","published":'4-3-2017'},
  {"id":4,"title":"第四篇","body":"正文4","published":'4-4-2017'},
  {"id":5,"title":"第五篇","body":"正文5","published":'4-5-2017'},
  {"id":6,"title":"第六篇","body":"正文6","published":'4-6-2017'},
  {"id":7,"title":"第七篇","body":"正文7","published":'4-7-2017'},
];
//倒出两个方法
exports.getBlogEntries = function(){
  return entries;
};

exports.getBlogEntry = function(id){
  for(var i =0;i<entries.length;i++){
    if(entries[i].id == id)
      return entries[i];
  }
};

views(是express的默认视图文件夹)

express的学习,与使用第2张

layout.html

<html>
<head>
   <title>{{title}}</title>
</head>
<body>
    {{{body}}}
   <footer>
      <p>
         <a href="/">首页</a> - <a href="/about">自我介绍</a>
      </p>
   </footer>
</body>
</html>

index.html

 <h1>文章列表</h1>
{{#each entries}}
   <p>
      <a href="/article/{{id}}">{{title}}</a><br/>
      Published: {{published}}
   </p>
{{/each}}  
 

article.html

<!-- <!DOCTYPE html>
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <p>34333</p>
    {{blog.title}}
  </body>
</html> -->


<h1>{{blog.title}}</h1>
Published: {{blog.published}}

<p/>

{{blog.body}}

about.html

<!-- <h1>自我介绍</h1>
{{title}}
<p>正文</p>
<img class="img" src="/images/q.jpg" alt=""> -->


<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>{{title}}</title>
    <link rel="stylesheet" href="/css/style.css">
  </head>
  <body>
    <div class="">
      <h1>自我介绍</h1>
      <div class="">
        <img class="img" src="/images/q.jpg" alt="">
      </div>
    </div>
    <h3>w文件上传递</h3>
    <div class="">
      <form action="/pictures/upload" method="POST" enctype="multipart/form-data">
        Select an image to upload:
        <input type="file" name="image">
        <input type="submit" value="Upload Image">
      </form>
    </div>
  </body>
</html>

这里要解释一下,我的about.html模版是使用的html页面,当然你也可以使用hbs的模版

 <h1>自我介绍</h1>
{{title}}
<p>正文</p>
<img class="img" src="/images/q.jpg" alt="">  

完整学习实例参考:http://blog.csdn.net/ganxunzou/article/details/42918015

(知识共享,知识的搬运工)

看完这片文章就在思考怎么将express与前端相结合起来呢???(我不轻易问问提的。。。。)

写个css的都知道前端框架有很多vue,angular,react,他们都有自己的路由机制,而且还是蛮好用的。。。。。

探究一番。。。。

文件目录:

express的学习,与使用第3张

app.js

(这个是没有使用express的模版引擎的,我要做的就是使用express做接口数据层使用前端路由,访问接口地址,进行数据获取)

var express = require("express");

var path =require("path");

var routes = require("./routes/index");//

var app = express();

app.use(express.static(path.join(__dirname,'public')));

app.use('/',routes);

app.listen(3001);

routes/index.js

var express = require('express');

var router = express.Router();

router.get('/',function(req,res,next){
  res.render('index',{
    title:'express'
  });
});

router.get('/foo',function(req,res,next){
  res.json({
    "name":"tom",
    "age":33
  })
});

router.get('/bar',function(req,res,next){
  res.send({
    "name":"bar",
    "age":33
  })
});
router.get('/goinfo',function(req,res,next){
  res.send({
    "name":"goinfo",
    "age":33
  })
});
module.exports =router;

看到这里可能有同学说这个和上面那个例子不是一样的吗????

不一样。。。区别就是res.send(),与res.render()的区别,并且我也没用express的模板引擎

res.send(),或者res.json()是还回数据,res.render()渲染页面

public:(主要存放一些资源文件)

express的学习,与使用第4张

index.html

(使用vue框架,简单的搭建了几个页面,没有使用vue-cli,因为不是终点)

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
    <script type="text/javascript">

    </script>
    <script type="text/javascript" src="../lib/vue2.js">  </script>
    <script type="text/javascript" src="../lib/vue_router.js">  </script>
    <script type="text/javascript" src="../lib/axios.min.js">  </script>
  </head>
  <body>
    <div class="">
    </div>
    <div class="" id="app">

    </div>
  </body>
</html>
<script type="text/javascript">

  const Home={
    template:'<div>this is home page</div>',
    // methods:{
    //   getData(){
    //     axios.get('/').then(function(res){
    //       console.log(res);
    //     }).catch(function(err){
    //       console.log(err);
    //     });
    //   }
    // },
    // mounted(){
    //   this.getData();
    // }

  };
  const foo={
    template:'<div>this is foo page</div>',
    methods:{
      getData(){
        axios.get('/foo').then(function(res){
          console.log(res);
        }).catch(function(err){
          console.log(err);
        });
      }
    },
    mounted(){
      this.getData();
    }
  };
  const bar={
    template:'<div>this is bar page</div>',
    methods:{
      getData(){
        axios.get('/bar').then(function(res){
          console.log(res);
        }).catch(function(err){
          console.log(err);
        });
      }
    },
    mounted(){
      this.getData();
    }
  };

  const goInfo={
    template:'<div>this is foo goInfo</div>',
    methods:{
      getData(){
        axios.get('/goInfo').then(function(res){
          console.log(res);
        }).catch(function(err){
          console.log(err);
        });
      }
    },
    mounted(){
      this.getData();
    }
  };
   const router =new VueRouter({
       mode:'history',
       routes:
     [
        {
          path:'/',
          name:'home',
          component:Home,
          // children:[
          //     {path:'foo',name:'foo',component:foo},
          // ]
        },
        {path:'foo',name:'foo',component:foo},
        {path:'/bar',name:'bar',component:bar},
        {path:'/goinfo',name:'goinfo',component:goInfo},
     ]
   })

  const mou = new Vue({
    el:"#app",
    router,
    template:`
      <div id="app">
        <h1>Name Routes</h1>
        <p>currnt route </p>
        <ul>
          <li>
            <router-link :to="{name:'home'}">home</router-link>
          </li>
          <li>
            <router-link :to="{name:'foo'}">foo</router-link>
          </li>
          <li>
            <router-link :to="{name:'bar'}">bar</router-link>
          </li>
          <li>
            <router-link :to="{name:'goinfo'}">goinfo</router-link>
          </li>
        </ul>
        <router-view></router-view>
      </div>
    `
  });
</script>

然后你直接在命令行输入: node app.js

访问localhost:3000

主要的已经讲完了,

接下来补充几点:

//若要设置HTTP头部信息
app.get('/htp',function(req,res){
  var body = "Hello world";
  res.setHeader("Content-Type","text/plain");
  res.setHeader('Content-Length',body.length);
  res.setHeader('expire',"nocache");
  res.send(body);
});

参考例子:http://www.cnblogs.com/KevinSong/p/4495729.html#3837987

例子源码地址:

https://github.com/EvalGitHub/myExpress

免责声明:文章转载自《express的学习,与使用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Deep Learning部署TVM Golang运行时Runtime拓端数据tecdat|R语言贝叶斯线性回归和多元线性回归构建工资预测模型下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

JS实现“隐藏与显示”功能(多种方法)

1,通过按钮实现隐藏与显示: 这个是通过按钮点击实现的隐藏与显示,具体代码如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47...

html表格宽度设置失效

问题描述: 我在写一个网页table时,table宽度超过了我预想的宽度,我想把它设置小一点,但总是没效果。改到怀疑人生!代码如下: 经过多次调试后发现一个问题,table可以改变大小,但是会有一个最小值,低于最小值时,数值修改会无效,table大小始终是最小值。后灵机一动,把问题锁定在input标签上。思考时认为,表格大小有最小值是因为里面有东西把它撑...

java数据库登陆页面

下面是一些总结但是部分来源于网络。 1.java语言 2. 面向对象分析设计 XML 语言 网页脚本语言 数据库 应用服务器 集成开发环境 .java语言:JSP、Servlet、JDBC、javaBean(Application)从这四部分开始创建web项目。 (一)java Database Connectivity(JBDC)技术 它是一种执行...

JQuery中的DOM操作

内容摘录自锋利的JQuery一书 一. DOM操作的分类 一般来说,DOM操作分为3个方面,即DOM Core(核心)、HTML-DOM和CSS-DOM。 1. DOM Core DOM Core并不专属于javascript,任何一种支持DOM的程序设计语言都可以使用它。它的用途并非仅限于处理网页,也可以用来处理任何一种使用标记语言编写出来的文档,如XM...

【转】 JS实现HTML标签转义及反转义

原文地址:http://blog.600km.xyz/2015/12/15/js-encode-html-tags/ 简单说一下业务场景,前台用户通过input输入内容,在离开焦点时,将内容在div中显示。 这时遇到一个问题,如果用户输入了html标签,则在div显示中,标签被解析。 由于是纯前端操作,不涉及后端,因此需要通过js对输入内容进行转义。 这里...

css 控制文字超出时显示省略号

不多说,直接看代码吧: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>内容超出显示省略号</title> <style> .limitWord{ width:200px;...