Node.js之Express二
好久没写了,今天看博客,觉得有必要把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二的更多相关文章
- Node.js、express、mongodb 入门(基于easyui datagrid增删改查)
前言 从在本机(win8.1)环境安装相关环境到做完这个demo大概不到两周时间,刚开始只是在本机安装环境并没有敲个Demo,从周末开始断断续续的想写一个,按照惯性思维就写一个增删改查吧,一方面是体验 ...
- node.js和express.js安装和使用步骤 [windows]
PS: NODEJS:https://nodejs.org NPM:https://www.npmjs.com/ 一.node.js安装与配置 到https://nodejs.org/en/downl ...
- Node.js系列-express(上)
前言 Node.js系列的第一篇:http,大概描述了通过使用node.js内置的api创建一个服务并监听request实现简单的增删改查.现在,我们就通过通读express官网及使用express框 ...
- node.js使用express框架进行文件上传
关于node.js使用express框架进行文件上传,主要来自于最近对Settings-Sync插件做的研究.目前的研究算是取得的比较好的进展.Settings-Sync中通过快捷键上传文件,其实主要 ...
- node.js之express框架
之前学习过node.js接触过express框架,最近为了编写一个mock server正好用到了express.下面正好就跟大家介绍一下关于express.今天的内容主要围绕这么几个方面? expr ...
- Node.js、express、mongodb 实现分页查询、条件搜索
前言 在上一篇Node.js.express.mongodb 入门(基于easyui datagrid增删改查) 的基础上实现了分页查询.带条件搜索. 实现效果 1.列表第一页. 2.列表第二页 3. ...
- Node.js基于Express框架搭建一个简单的注册登录Web功能
这个小应用使用到了node.js bootstrap express 以及数据库的操作 :使用mongoose对象模型来操作 mongodb 如果没了解过的可以先去基本了解一下相关概念~ 首先注 ...
- node.js框架express的安装
node.js框架express的安装 首先假定你已经安装了 Node.js,接下来为你的应用创建一个目录,然后进入此目录并将其作为当前工作目录. $ mkdir myapp $ cd myapp 通 ...
- node.js,express入门看详细篇
先最简单的代码 安装 npm install express app.js 代码内容 const express = require('express') const app = express() ...
随机推荐
- oracle 导出导入命令
imp YG_XSOA_NEW/kingo@20.14.12.14/XSSJZX file=d:\daochu.dmp full=y (导入) exp YG_XSOA_NEW/kingo@20 ...
- C#开发微信小程序
个人见解,欢迎交流,不喜勿喷. 微信小程序相比于微信公众号的开发,区别在于微信小程序只请求第三方的数据,整个界面的交互(view)还是在微信小程序上实现,前后端完全分离,说白了,微信小程序开发与具 ...
- 显式等待-----Selenium快速入门(十)
上一篇说了元素定位过程中的隐式等待,今天我们来探讨一下显示等待.显式等待,其实就是在使用WebDriverWait这个对象,进行等待.显式等待对比隐式等待,多了一些人性化的设置,可以说是更细化的隐式等 ...
- 隐式等待-----Selenium快速入门(九)
有时候,网页未加载完成,或加载失败,但是我们后续的代码就已经开始查找页面上的元素了,这通常将导致查找元素失败.在本系列Selenium窗口切换-----Selenium快速入门(六)中,我们就已经出现 ...
- .net core初试 --- 控制台程序
.net core这个名字对.net程序员来说都不陌生了,但貌似圈子里真正有开发经验的并不多,关键是公司的项目没需求. 今天我就趁着不忙上手玩了玩,搞明白了一些东西,心中也有了十万个为什么.那么现在与 ...
- hdu 5500 Reorder the Books
http://acm.hdu.edu.cn/showproblem.php?pid=5500 Reorder the Books Time Limit: 4000/2000 MS (Java/Othe ...
- 超简单工具puer——“低碳”的前后端分离开发
本文由作者郑海波授权网易云社区发布. 前几天,跟一同事(MIHTool作者)讨教了一下开发调试工具.其实个人觉得相较于定制一个类似MIHTool的Hybrid App容器,基于长连的B/S架构的工具其 ...
- ZZNU 2055(基姆拉尔森计算公式)
题目链接 题意: 比如今天是2017年8月16日,星期三.下一个也是星期三的8月16日发生在2023年. 现在是日期是yyyy-mm-dd,我们希望你求出薛定谔会跳跃到那一年. 题解: emmmm.. ...
- TDDL与Spring Boot集成Version报错——跟踪与解决
先说背景:公司采用diamond+tddl,这套技术来做web管理.本人处于好奇率先体验了下spring-boot,于是就有了spring-boot+tddl的组合.但是jar包上线后,屡屡发现一条e ...
- kubernetes traefik multiple namespaces
官方文档在此 https://docs.traefik.io/user-guide/kubernetes/ 官方文档在配置 RBAC 时使用了 ClusterRoleBinding, 当你想用多命名空 ...