好久没写了,今天看博客,觉得有必要把node.js继续写完,善始善终。原本想着把小崔课堂继续讲下去,由于其他原因也就此耽搁下来,看看以后还有没有机会吧。废话不扯,123开始。

一.Exoress之Request对象

对于Request对象做过网络这块的应该都不陌生,ios、C#都会有,其他语言基本都会有,Node.js也不例外,毕竟都是HTTP协议。

var express = require('express');
var app = express();
app.listen();
app.get('/user/:userid', function (req, res) {
//请求的原始URL字符串
console.log("URL:\t " + req.originalUrl);
//协议的字符串 如http、https
console.log("Protocol: " + req.protocol);
//请求的IP地址
console.log("IP:\t " + req.ip);
//请求的URL的路径部分
console.log("Path:\t " + req.path);
//请求的主机名
console.log("Host:\t " + req.host);
//请求的方式 get、post等
console.log("Method:\t " + req.method);
//请求的查询字符串部分
console.log("Query:\t " + JSON.stringify(req.query));
//布尔值,当最后修改与当前匹配时为true
console.log("Fresh:\t " + req.fresh);
//布尔值,当最后修改与当前匹配时为false
console.log("Stale:\t " + req.stale);
//布尔值,建立TLS链接时为true
console.log("Secure:\t " + req.secure);
//一个方法,如果由charset指定的字符集受支持为true
console.log("UTF8:\t " + req.acceptsCharset('utf8'));
//返回header的值的方法
console.log("Connection: " + req.get('connection'));
//请求标头的对象形式
console.log("Headers: " + JSON.stringify(req.headers,null,));
res.send("User Request");
});

二、Exoress之Response对象

有请求一般都会有响应,所以Response来了。

1.设置标头

设置标头是制定适当的HTTP响应的一个重要组成部分。Response对象提供了几个方法来获取和设置发送的HTTP响应的标头值。

最常用的是get(header)和set(header,value),它们分别获取和设置任何标头值。

var oldType=res.get('Content-Type'); res.set('Content-Type','text/plain');

get(header):返回所指定的header参数的值

set(header,value):设置header参数的值

set(headerObj):接受一个对象,它包含多个'header':'value'属性。每个在headerObj参数中的标头都在response对象中被设置

location(path):把location标头设置为指定的path参数。该路径可以是URL路径:/login,完整的URL:http://server.net/,相对路径:../users或者是浏览器行为:back

type(type_string):根据type_string参数设置Content_Type标头。该参数可以是一个正常的内容类型:application/json,部分类型:png或文件扩展名html

attachment([filepath]):把Content-Disposition标头设置为attachment,并且如果知道filepath,则Content-Type头是基于文件扩展名设置的

2.设置状态

前面HTTP协议也有提到5种状态。1-5开头代表的不同的意思。通过res.status(number)来设置。

3.发送响应

上面是一些响应头,那发送响应就是要发送响应体了

发送响应通过send([body])方法。body是一string或buffer对象。如果是buffer对象,则内容类型自动设置为application/octet-stream(应用程序/八位字节流)

,除非明确设置为别的

res.set('Content-Type','text-html');

res.send(new Buffer('<html><body>HTML String</body></html>'));

一旦send()方法完成,就可设置res.finished和res.headerSent(私有这个要通过断点才能查到)属性值来验证相应是否发送、传输了多少数据等。

var express = require('express');
var url = require('url');
var app = express();
app.listen();
app.get('/', function (req, res) {
var response = '<html><head><title>Simple Send</title></head>' +
'<body><h1>Hello from Express</h1></body></html>';
res.status();
res.set({
'Content-Type': 'text/html',
'Content-Length': response.length
});
res.send(response);
console.log('Response Finished? ' + res.finished);
});
app.get('/error', function (req, res) {
res.status();
res.send("This is a bad request.");
});

4.发送JSON响应

有时候客户端页面的变化只是一些数据的变化,这样再从服务端请求html这样就会给服务端造成很大的压力,html客户端已经有了也没有这个必要,服务端只需把数据传给客户端就好了,于是有了json()和jsonp()方法,它们可以方便的发送json

res.json(status,[object])  res.json([body]) res.jsonp(status,[object]) res.jsonp([object])

var express = require('express');
var url = require('url');
var app = express();
app.listen();
app.get('/json', function (req, res) {
app.set('json spaces', );
res.json({name:"Smithsonian", built:'', items:'137M',
centers: ['art', 'astrophysics', 'natural history',
'planetary', 'biology', 'space', 'zoo']});
});
app.get('/error', function (req, res) {
res.json(, {status:false, message:"Internal Server Error"});
});
app.get('/jsonp', function (req, res) {
app.set('jsonp callback name', 'cb');
res.jsonp({name:"Smithsonian", built:'', items:'137M',
centers: ['art', 'astrophysics', 'natural history',
'planetary', 'biology', 'space', 'zoo']});
});

5.发送文件

sendfile(path,[options],[callback])使用一个函数调用来完成将文件发送到客户端需要做的事情。

1.基于文件扩展名设置Content-Type标头的类型

2.设置其他相应的标头,如Content-Length

3.设置响应状态

4.使用Response对象内部连接,把文件的内容发送的客户端

path:要发送给客户端的文件

options:一个对象,包含一个maxAge属性定义的最长期限的内容和root属性(它是用来支持path参数相对路径的根路径)

,当文件传输完成,回调函数被调用,并接受一个错误作为唯一的参数

var express = require('express');
var url = require('url');
var app = express();
app.listen();
app.get('/image', function (req, res) {
res.sendfile('arch.jpg',
{ maxAge: ***,
root: './views/'},
function(err){
if (err){
console.log("Error");
} else {
console.log("Success");
}
});
});

6.发送下载响应

download(path,[filename],[callback])工作原理类似sendfile()方法,download()把文件作为HTTP响应的附件发送。path:发送到客户端的文件 filename:指定一个应该在Content-Disposition标头中发送的不同的文件名。回调函数在文件下载完成后执行。

var express = require('express');
var app = express();
app.listen();
app.get('/download', function (req, res) {
res.sendfile('./views/word.docx', 'new.docx');
});

7.重定向响应

这个在C#中也是有的也挺简单的

var express = require('express');
var url = require('url');
var app = express();
app.listen();
app.get('/google', function (req, res) {
res.redirect('http://google.com');
});
app.get('/first', function (req, res) {
res.redirect('/second');
});
app.get('/second', function (req, res) {
res.send("Response from Second");
});
app.get('/level/A', function (req, res) {
res.redirect("/level/B");
});
app.get('/level/B', function (req, res) {
res.send("Response from Level B");
});

Node.js之Express二的更多相关文章

  1. Node.js、express、mongodb 入门(基于easyui datagrid增删改查)

    前言 从在本机(win8.1)环境安装相关环境到做完这个demo大概不到两周时间,刚开始只是在本机安装环境并没有敲个Demo,从周末开始断断续续的想写一个,按照惯性思维就写一个增删改查吧,一方面是体验 ...

  2. node.js和express.js安装和使用步骤 [windows]

    PS: NODEJS:https://nodejs.org NPM:https://www.npmjs.com/ 一.node.js安装与配置 到https://nodejs.org/en/downl ...

  3. Node.js系列-express(上)

    前言 Node.js系列的第一篇:http,大概描述了通过使用node.js内置的api创建一个服务并监听request实现简单的增删改查.现在,我们就通过通读express官网及使用express框 ...

  4. node.js使用express框架进行文件上传

    关于node.js使用express框架进行文件上传,主要来自于最近对Settings-Sync插件做的研究.目前的研究算是取得的比较好的进展.Settings-Sync中通过快捷键上传文件,其实主要 ...

  5. node.js之express框架

    之前学习过node.js接触过express框架,最近为了编写一个mock server正好用到了express.下面正好就跟大家介绍一下关于express.今天的内容主要围绕这么几个方面? expr ...

  6. Node.js、express、mongodb 实现分页查询、条件搜索

    前言 在上一篇Node.js.express.mongodb 入门(基于easyui datagrid增删改查) 的基础上实现了分页查询.带条件搜索. 实现效果 1.列表第一页. 2.列表第二页 3. ...

  7. Node.js基于Express框架搭建一个简单的注册登录Web功能

    这个小应用使用到了node.js  bootstrap  express  以及数据库的操作 :使用mongoose对象模型来操作 mongodb 如果没了解过的可以先去基本了解一下相关概念~ 首先注 ...

  8. node.js框架express的安装

    node.js框架express的安装 首先假定你已经安装了 Node.js,接下来为你的应用创建一个目录,然后进入此目录并将其作为当前工作目录. $ mkdir myapp $ cd myapp 通 ...

  9. node.js,express入门看详细篇

    先最简单的代码 安装 npm install express app.js 代码内容 const express = require('express') const app = express() ...

随机推荐

  1. [ACM_数据结构] Color the ball [线段树水题][数组开大]

    Description N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的“小飞鸽"牌电动车从气球a开始到气球b依次 ...

  2. C# 下载文件 删除文件 写入文本

    由于经常用到文件处理,便自己封装了下 分享给大家. 包含写入文本  批量删除文件  下载文件 .--可直接使用 /// <summary> /// 写入到txt /// </summ ...

  3. CSS3 & 页面布局

    相关链接 视频链接: CSS3 & 页面布局 CSS3与页面布局学习总结(一) CSS3与页面布局学习总结(二) CSS3与页面布局学习总结(三) CSS3与页面布局学习总结(四) CSS3与 ...

  4. Yes,I know the way to learn Ens !

    In recent years, translation has gone out of fashion as a way to learn a new language. A lot of peop ...

  5. series dataframe 的 idxmax()

    返回最大值的索引

  6. Xcode的多种Build Configuration

    一: 建多个Configuration的目的. 多套域名打包. 1 开发时的域名. 2 内测时的域名. 3 公测时的域名. 4 企业版的域名. 5 APP Store的域名. 通过注释的方式,容易出错 ...

  7. 【Hight Performance Javascript】——脚本加载和运行

    脚本加载和运行 当浏览器遇到一个<script>标签时,无法预知javascript是否在<p>标签中添加内容.因此,浏览器停下来,运行javascript代码,然后继续解析. ...

  8. jvm(1)类的加载(二)(自定义类加载器)

    [深入Java虚拟机]之四:类加载机制 1,从Java虚拟机的角度,只存在两种不同的类加载器: 1,启动类加载器:它使用C++实现(这里仅限于Hotspot,也就是JDK1.5之后默认的虚拟机,有其他 ...

  9. Android中获取系统内存信息以及进程信息-----ActivityManager的使用(一)

    本节内容主要是讲解ActivityManager的使用,通过ActivityManager我们可以获得系统里正在运行的activities,包括 进程(Process)等.应用程序/包.服务(Serv ...

  10. python相见恨晚的库

    1)基本工具: virtualenv(虚拟环境)pip.setuptools (e.g. easy_install,这些东西肯定要呢)ipython(用了以后,就不再想用普通的python shell ...