开始真正的node web开发——express框架

为何说现在才是web开发的真正开始呢?

首先任何企业都不会用原生的http协议API去开发一个完整的网站,除非她们先开发一个框架出来,其次我们之前的所谓http,connect都只是打开了一个http服务器而已,顶多只能算个工具集(中间件),最后使用像express这样的框架使我们把精力集中到功能业务上来了!

生产力因此而得以体现!

引入express

上一章,即便我们已经可以使用connect处理用户各种请求了,但依然需要我们人为的去关注路由,文件判断,并且connect,serve-static只是起到了纯中间作用,且拼拼凑凑组合出一个看上去还不错的网站,这些并没有直接加强HTTP这个API。

可以发现我们依然在使用 require("http").createServer()" 来创建http服务

package.json

{
"name":"test-express",
"version":"0.0.1",
"description":"an express example",
"dependencies":{
"express":"latest",
"jade":"latest"
}
}
npm install

Express是直接在http上加强的,封装了http API,我们不必再为http API缺少操心了

Express创建HTTP服务器

var express = require("express");
var app = express(); app.get('/',function(req,res){
res.send("hello world");
}); app.listen(3000);

可以看到express模块暴露的express方法本身,返回一个对象,其get方法已经解决了路径处理的问题。这是一个非常简单的示例页面,已经让我感受到了他将会使得web开发变得十分简单。

Express托管静态文件

使用express框架express.static来对上一回中的serve-static托管静态文件做修改,必须说明的是:express.static 是 Express 内置的唯一一个中间件。是基于 serve-static 开发的,负责托管 Express 应用内的静态资源。(官网说明)

新建一个public目录专门存放静态文件:css,js,images等资源文件都可以

app.use(express.static('public'));

只需要一行代码,测试效果

Express视图业务分离——模板渲染引擎Jade

在刚开始开发web那会,我一直无法理解php的smarty是什么,在开发了javaee之后,慢慢熟悉了一个名词“模板引擎”,由于php本身可以内嵌html所以,很容易让初学者忽视了这个模板引擎的概念,后来,开发java之时,我们需要将前端(html)后端(java)进行分离的时候,就需要接触到模板引擎了,主要作用:

在纯html文件中输入规定格式的变量或者逻辑语言,在经过http发送给客户端浏览器前将其中的变量标记替换为对应的值,并且将逻辑语言编程,最终生成纯html文件流发送给客户端。

通俗言之:模板引擎像一个加工模具,将非纯html(带模板代码)装入,生成新的,完善的纯html代码,这样我们不需要在html中直接嵌入后端语句来动态修改页面,这实现了逻辑和视图的分离(模板引擎是动态网站的核心内容之一)

举个栗子,使用Jade模板引擎!(需要外部模块,前面package.json中已经加入了)

首先模板存放位置,新建:views目录->新建index.jade文件

前端index.jade

doctype
html
head
title= pageTitle
script(type='text/javascript').
function showCityEx(city)
{
return city + " & " + city;
} body
h1 #{h1} table(border=1)
tr
th hello
th world,citys.count=#{cscores.length + 3}
th count
for city,index in citys
tr
td= index
td welcome to #{city}(#{city.substr(0,4)})
td= cscores[index]
div over!

后端:index.js

var express = require("express");
var app = express(); var city_names = [
'wuhan',
'tianjin',
'beijing',
'shanghai'
];
var city_scores = [
'60',
'62',
'80',
'70'
];
app.use(express.static('public'));
app.set("view engine","jade");
app.set("views",__dirname+"/views"); app.get('/',function(req,res){
res.render("index",{citys:city_names,cscores:city_scores});
}); app.listen(3000);

解释

学习express先不理会那些jade模板代码,如需了解,参考Jade官网API:http://jade-lang.com/

重心放在nodejs代码上,app.get方法并没有改变,参数URL绑定了参数回调函数。

res调用了render,是模板引擎渲染方法,表示向客户端输出一个渲染后的html

  1. 配置一:使用app.set可以配置express,将view engine设置为jade
  2. 配置二:将模板存放位置配置为:views目录,我们将jade文件放在里面,以后自动读取
  3. render参数一:文件名,不带后缀
  4. render参数二:jade模板中需要替换掉的变量
  5. render还有一个参数是回调函数,处理生成的html,可以这样写:
res.render("index",function(err,html){
//继续处理html,比如打印到控制台console.log(html);
});

模板引擎的基本使用套路无非就是:设置模板类型,设置模板目录,render出来!

Jade模板语言本身值得我们单独拿出来学习!

Express request与response

整个HTTP开发都围绕着request(用户请求)和response(响应请求)在做开发。

express为我们封装了http的req与res对象,方便开发。

记录一些常见的对象方法:

Request

如果直接打印req对象你会看到一堆乱七八糟东西,没啥意思。

打印如下这些东西研究一下:

params对象

app.get('/user/:name',function(req,res){
console.log(req.params.name);
})

地址栏输入:http://localhost:3000/user/devil

终端显示:

query对象

app.get('/user',function(req,res){
console.log(req.query.name);
});

地址栏输入:http://localhost:3000/user?name=devil

终端显示:同上!

Response

download()

app.get('/getimg',function(req,res){
res.download(__dirname+"/public/images/xq.jpg");
});

用于下载文件,使用后强制用户下载该文件

json()和jsonp()

app.get('/json',function(req,res){
res.json({name:"devil",sex:"男",body:"strong"});
});

强制将js对象转换为json数据格式发送给客户端,后者则支持jsonp,效果一样。

redirect()

app.get('/baidu',function(req,res){
res.redirect('http://www.baidu.com');
});

重定向到其他页面

send()

app.get('/send',function(req,res){
res.send({some:'json'});
});

send是express非常常用的方法,功能巨多,优点是可自动转化格式,输入数字发送状态码,输入字符串返回客户端字符串,输入js对象返回json对象,他能对参数数据类型做很好的判断,要优于上述json()方法。

sendFile()

app.get('/send',function(req,res){
res.sendFile("E:\\视频\\电影\\v字仇杀队.mp4");
});

这个就有意思了,是发送文件,但并不会使得用户下载,应该是以二进制流的方式发送文件,理论上还需要浏览器支持,测试后效果:

如果是图片文件,则显示图片。

将js进行到底:node学习6的更多相关文章

  1. 【特别推荐】Node.js 入门教程和学习资源汇总

    这篇文章与大家分享一批很有用的 Node.js 入门教程和学习资源.Node 是一个服务器端的 JavaScript 解释器,它将改变服务器应该如何工作的概念.它的目标是帮助程序员构建高度可伸缩的应用 ...

  2. Node.js 入门教程和学习资源汇总

    这篇文章与大家分享一批很有用的 Node.js 入门教程和学习资源.Node 是一个服务器端的 JavaScript 解释器,它将改变服务器应该如何工作的概念.它的目标是帮助程序员构建高度可伸缩的应用 ...

  3. Node.js环境搭建和学习(windwos环境)

    Node.js环境搭建和学习 一.环境搭建 1.下载安装文件 下载地址http://nodejs-org.qiniudn.com/下载Node.js环境安装包,根据操作系统下载对应的安装包 下载地址 ...

  4. node 学习笔记 - Modules 模块加载系统 (1)

    本文同步自我的个人博客:http://www.52cik.com/2015/12/11/learn-node-modules-path.html 用了这么久的 require,但却没有系统的学习过 n ...

  5. [学姿势]实验室搬砖+node学习

    这周开始进行收尾工作,我当然没有进行核心技术的开发,主要负责的是对web端进行展示上的修修补补,主要包括添加VLC播放器.rtsp视频流以及一些js细节. 1.VLC 全称为Video Lan Cli ...

  6. 2015第40周二Node学习

    node历史 今天看cnode开源项目用了io.js,在查这个项目时发现这篇文章node历史,node.js和io.js关系谈到Node.js的由来,不可避免要聊到它的创始人Ryan Dahl.在20 ...

  7. 2015第40周一Node学习

    node学习尝试 早上看了张丹大牛博客文章nodeJS学习路线图和node从零入门系列,感觉获益匪浅,尝试了里面几项内容,对node有了更深入的认识. npm npm是一个node包管理和分发工具,已 ...

  8. Node学习——开篇

    前言:自从下决心转学前端以来,我的专业课java基本荒废了,所以对于后台开发的逻辑也已基本忘干净了.但是作为一名准前端程序猿,我认为还是有必要了解后端开发的,虽不必深入学习,但是能够了解项目从前端到后 ...

  9. node 学习资料

    Node 学习资料: 资料名称 网址 Node.js 中文API文档 http://nodejs.cn/api/ Node 菜鸟教程 http://www.runoob.com/nodejs/node ...

  10. Node学习HTTP模块(HTTP 服务器与客户端)

    Node学习HTTP模块(HTTP 服务器与客户端) Node.js 标准库提供了 http 模块,其中封装了一个高效的 HTTP 服务器和一个简易的HTTP 客户端.http.Server 是一个基 ...

随机推荐

  1. Docker 三剑客--Machine

    Machine 我们知道在多个集群服务环境下,安装管理Docker的容器,要使用的是Docker Swarm,而使用Docker Swarm的情况是在多个集群的服务器已经搭建好Docker环境的情况下 ...

  2. http协议笔记(不全)

    1.URL 统一资源定位系统 URL由三部分组成:资源类型.存放资源的主机域名.资源文件名.url是统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址 ...

  3. 【转】我们为什么要使用 Markdown

    目录 从前码字时我们面临着什么困境 标记语言显神威 到底什么是 Markdown 所以为什么我们要使用 Markdown Markdown 简明语法 段落和换行 标题 区块引用 列表 强调 代码标识和 ...

  4. fiddler抓包可以抓到电脑数据抓不到手机上的数据------防火墙问题

    1.确保手机与电脑处于同一局域网,网络没问题,手机代理设置无误 2.确保fiddler设置没有任何问题 3.如果此时还是无法抓包,请打开控制面板----Windows防火墙------允许程序通过Wi ...

  5. LAMP环境搭建,防火墙开启,数据库挂载在逻辑卷

    具体要求: 1. 源码部署 LAMP 环境, 和生产保持一致 2. 静态资源文件同步生产环境 3. 需要同时部署 2 个 web 网站 步骤: 一. 需要的安装包. 提前准备好. apr-util-1 ...

  6. TextBox换行C#文本框换行.net文本框换行textarea换行

    在TextBox中输入的内容,显示的时候如果用lable显示,无法换行 可以使用TextBox输入,然后也使用TextBox 显示,这样换行输入的内容,显示的时候也可以换行.显示的时候可以设置一下控件 ...

  7. ElasticSearch 分组查询

    curl -XPOST 'localhost:9200/bank/_search?pretty' -d ' { "size": 0, "aggs": { &qu ...

  8. hashlib python 加密框架

    python3中digest()和hexdigest()区别 转自:https://www.cnblogs.com/yrxns/p/7727471.html hashlib是涉及安全散列和消息摘要,提 ...

  9. Linux基础篇六:Linux文件属性和类型

    -:代表文件 s: sorket文件 b:block块设备 (磁盘,光驱等) c:字符设备 l:连接文件 p:管道文件 d:代表目录文件 为了更加区分- (文件的具体类型),系统提供了file命令更加 ...

  10. [LC] 151. Reverse Words in a String

    Given an input string, reverse the string word by word. Example 1: Input: "the sky is blue" ...