Node编程 创建http Server容器,访问静态页,使用http模块模拟调用第三方的接口

版权声明: https://blog.csdn.net/xyphf/article/details/84201009

目录

Node基础编程

nodeJS特点:

下面我们演示一下CommonJS规范,

在Demo.js中创建Server;

访问HTML静态页

使用http模块模拟调用第三方的接口


1.node.js基于Chrome V8引擎的JavaScript环境,它里面一共有两个信息点;

第一个信息点:Chrome V8引擎,它是基于Chrome浏览器端新一代的V8引擎,它的渲染速度更快,性能更高;

第二个信息点:JavaScript运行环境,也就是说我们可以编写JavaScript代码在我们的服务器端进行编译和运行.

nodeJS特点:

1、基于Chrome V8引擎,它可以构建高性能可扩展的高性能服务器,在处理高并发方面有一定的优势,node和C语言相比在性能方面几乎不相上下;

2、单线程,JavaScript本身是一门单线程的编程语言,它和Java相比,Java语言本身是多线程的;(何为单线程,就是说在同一时间,它只能做同一件事)

3、使用JavaScript开发后端代码 我们可以使用nodeJS像开发前端一样去开发后端服务,只不过nodeJS提供了一些服务端的模块,它和前端的一些框架其实是不太一样的,我们不能将前端的一些框架库直接运用到后端,但是nodeJS提供了和我们前端一样的语法来去开发;

4、非阻塞的IO,因为我们的nodeJS本身是基于事件去驱动的;

————————————————————————————————————————————————————————

NodeJS本身是基于Common规范的

创建一个Http Server

创建一个Web容器,可以访问到HTML内容

Http模块客户端的演示

下面我们演示一下CommonJS规范,

在目录下建一个server目录;

在里面建一个User.js文件

/**
 * commonJS规范使用module.exports向外输出
 */
module.exports = {
    userName:"Jack",
    sayHello: function () {
        return "Hello";
    }
}

再建一个Demo.js目录

/**
 * commonJS规范使用require加载其他模块
 * commonJS规范中一个文件就代表一个模块
 * nodeJS本身是可以使用ES6语法的
 * 这里我们之所以可以之际使用require是因为node包中自带了require
 */
let user = require('./User');
/** 打印属性 */
console.log(`userName:${user.userName}`);

/** 打印方法 */
console.log(`I'm ${user.userName},I say ${user.sayHello()}`)

进入Server目录,  cd server

运行 node Demo.js

User.js还可以通过exports输出

/**
 * 还可以通过exports.输出
 */
exports.userName = "Tom";
exports.sayHello = function () {
    return "World";
}

————————————————————————————————————————————————————————

在Demo.js中创建Server;

引入http模块创建服务

引入url解析url

引入util将对象转换成字符串输出

  • res.statusCode设置返回状态码
  • res.setHeader设置响应头信息

  • res.end返回输出

  • listen 输入监听端口 主机地址 和 回调函数

url.parse() 解析url

util.inspect() 将对象转换成字符串输出

/** ------首先加载http模块-------------------------------------- */
let http = require('http');
let url = require('url'); // url模块是专门用来解析请求头的
let util = require('util'); // j引入util将对象转换程字符串输出

// 创建Server
let server = http.createServer((req,res)=> {
    res.statusCode = 200; // 设置成功返回的状态码
    res.setHeader("Content-Type","text/plain; charset=utf-8"); // 设置服务器端响应头

    // url.parse(req.url) 我们在res.end将url输出
    // util.inspect(url.parse(req.url)) // 是一种调试模式,通过inspect可以将对象转换成字符串输出
    console.log("url:" + req.url); // 我们发现打印出来的地址并不包括我们的协议和hash的
// 如果我们希望将完整的url解析有两种方法
// 第一种: 我们可以直接将完整的url放入url.parse中,如util.inspect(url.parse("http://localhost:3000/demo.html?a=123#tag"))
// 第二种: 在node的express框架中有个方法叫做originalUrl  如: util.inspect(url.parse(req.originalUrl)); 


    res.end(util.inspect(url.parse(req.url))); // res.end输出 ,当然也可以使用res.write输出 
}).listen(3000, '127.0.0.1', () => { // 使用listen设置监听端口 和 主机IP以及回调
    console.log("服务器已经运行,请打开浏览器,输入http://127.0.0.1:3000/ 来进行访问.")
});

运行node Demo.js

————————————————————————————————————————————————————————

访问HTML静态页

在Server目录下创建一个index.html页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title> Title </title>
</head>
<body>
    <h2>hello,测试一下,能否访问到</h2>
</body>
</html>

重新创建一个Server.js

let http = require('http');
let url = require('url');
let util = require('util');

let fs = require('fs'); // 引入fs文件系统模块

let server = http.createServer((req,res)=> {
    var pathname = url.parse(req.url).pathname;    // 获取文件名称
    fs.readFile(pathname.substring(1), function (err,data) {
        if(err) {
            res.writeHead(404,{
                'Content-Type':'text/html'
            });
        } else {
            res.writeHead(200,{
                'Content-Type':'text/html'
            })
            res.write(data.toString());
        }
        res.end();
    });

}).listen(3000, '127.0.0.1', () => {
    console.log("服务器已经运行,请打开浏览器,输入http://127.0.0.1:3000/index.html 来进行访问.")
});

运行node server.js

打开 http://127.0.0.1:3000/index.html

————————————————————————————————————————————————————————

使用http模块模拟调用第三方的接口

有些时候我们有些需求,去调用第三方的接口,大家可能会有疑问?nodeJS本身就是提供后端服务的,为什么还有提供第三方服务呢?nodeJS本身是给客户端去提供接口的,但是有些时候比如我们调用微信的SDK获取签名,或者说我们调用百度的云识别,我们需要去通过Http模拟请求来去访问第三方的接口,那么nodeJS你相对应的变成客户端。

有疑问也可以访问node.js文档 http://nodejs.cn/api/http.html

我建一个client.js客户端,client.js虽然被称之为客户端,但是它和前端是两回事,因为nnodeJS本身是一门服务端的语言,之所以nodeJS内部又分服务端和客户端是因为nodeJS本身可以提供一种服务被别人调用,被别人调用我们就可以称之为服务端。

但是我们有的时候也有一种需要,我们的底层服务是在别的服务器上搭建的,我们nodeJS需要去调用其他的服务,因此我们把这种方式就称之为客户端。它只是一种说法,它是相对而言的。

let  http = require('http');

let util = require('util');

http.get('http://www.imooc.com/u/loading', function (res){
    let data = '';
    res.on("data", function (chunk) { // 使用res.on来监听数据的接收 它并不能一次性的接收所有的数据 所以我们要使用++的形式 它需要有一个监听的过程
        data += chunk;
    });

    res.on("end", function () { // 最后还需要监听end 我们要知道什么时候接收完
        let result = JSON.parse(data); // 我们接收的data是字符串,我们需要使用JSON.parse把data进行转换成对象来返回给客户端

        // util.inspect 转换成字符串输出
        console.log("result:" + util.inspect(result));
    })
});

运行node client.js

猜你喜欢

转载自blog.csdn.net/xyphf/article/details/84201009