zoukankan      html  css  js  c++  java
  • Node.js之Express二

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

    一.Exoress之Request对象

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

    var express = require('express');
    var app = express();
    app.listen(8080);
    app.get('/user/:userid', function (req, res) {
      //请求的原始URL字符串
      console.log("URL:	   " + req.originalUrl);
      //协议的字符串 如http、https
      console.log("Protocol:  " + req.protocol);
      //请求的IP地址
      console.log("IP:	   " + req.ip);
      //请求的URL的路径部分
      console.log("Path:	   " + req.path);
      //请求的主机名
      console.log("Host:	   " + req.host);
      //请求的方式 get、post等
      console.log("Method:	   " + req.method);
      //请求的查询字符串部分
      console.log("Query:	   " + JSON.stringify(req.query));
      //布尔值,当最后修改与当前匹配时为true
      console.log("Fresh:	   " + req.fresh);
      //布尔值,当最后修改与当前匹配时为false
      console.log("Stale:	   " + req.stale);
      //布尔值,建立TLS链接时为true
      console.log("Secure:	   " + req.secure);
      //一个方法,如果由charset指定的字符集受支持为true
      console.log("UTF8:	   " + req.acceptsCharset('utf8'));
      //返回header的值的方法
      console.log("Connection: " + req.get('connection'));
      //请求标头的对象形式
      console.log("Headers: " + JSON.stringify(req.headers,null,2));
      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(8080);
    app.get('/', function (req, res) {
      var response = '<html><head><title>Simple Send</title></head>' +
                     '<body><h1>Hello from Express</h1></body></html>';
      res.status(200);
      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(400);
      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(8888);
    app.get('/json', function (req, res) {
      app.set('json spaces', 4);
      res.json({name:"Smithsonian", built:'1846', items:'137M',
                centers: ['art', 'astrophysics', 'natural history',
                          'planetary', 'biology', 'space', 'zoo']});
    });
    app.get('/error', function (req, res) {
      res.json(500, {status:false, message:"Internal Server Error"});
    });
    app.get('/jsonp', function (req, res) {
      app.set('jsonp callback name', 'cb');
      res.jsonp({name:"Smithsonian", built:'1846', 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(8088);
    app.get('/image', function (req, res) {
      res.sendfile('arch.jpg', 
                   { maxAge: 24*60*60*1000,
                     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(8008);
    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(8087);
    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");
    });
  • 相关阅读:
    从0系统学Android-2.3使用 Intent 在 Activity 之间穿梭
    从0系统学Android-2.1Activity的使用
    从0系统学Android-1.4日志工具的使用
    从0系统学Android--1.3创建你的第一个 Android 项目
    从0系统学Android--1.2 手把手带你搭建开发环境
    从0系统学 Android--1.1认识 Android
    Android 蓝牙开发(3)——蓝牙的详细介绍
    Android 蓝牙开发(3)——蓝牙的详细介绍
    Android 蓝牙开发(2)——低功耗蓝牙
    Android 蓝牙开发(1)
  • 原文地址:https://www.cnblogs.com/5ishare/p/5560606.html
Copyright © 2011-2022 走看看