最近学习的 Node.js 之 http

利用 http 模块开始写简单的web服务。

模块:

const http=require(‘http‘);
const fs=require(‘fs‘);
const path=require(‘path‘);

function startServer() {
    let onRequest=function (req,res) {
        console.log(‘recived a request.‘);
        res.writeHead(200,{‘Content-Type‘:‘text/html‘});

        let wwwdir= path.resolve(__dirname,‘../www‘);
        // console.log(wwwdir);
        let readStream = fs.createReadStream(wwwdir+‘/bbb.html‘);
        readStream.pipe(res);
    };

    let server=http.createServer(onRequest);
    server.listen(80,‘192.168.1.101‘);
};

exports.startServer = startServer;

调用者,APP,使用两行就开启了一个简单的web服务。

let server=require(‘./mod_server‘);

server.startServer();

单文件版路由,响应了几个不同的页面:

const http = require(‘http‘);
const fs = require(‘fs‘);
const path = require(‘path‘);

let wwwdir = path.resolve(__dirname, ‘../www‘);

let onRequest = function (req, res) {
    console.log(‘recived a request. ‘ + req.url);
    if (req.url === ‘/‘ || req.url === ‘/home‘) {
        res.writeHead(200, {‘Content-Type‘: ‘text/html;charset=UTF-8‘});
        let readStream = fs.createReadStream(wwwdir + ‘/index.html‘);
        readStream.pipe(res);
    } else if (req.url === ‘/about‘) {
        res.writeHead(200, {‘Content-Type‘: ‘text/html;charset=UTF-8‘});
        let readStream = fs.createReadStream(wwwdir + ‘/about.html‘);
        readStream.pipe(res);
    } else if (req.url === ‘/api‘) {
        res.writeHead(200, {‘Content-Type‘: ‘application/json‘});
        let jsonObj = {
            name: "alex",
            email: ‘[email protected]‘,
            age: 32
        };
        // console.log(JSON.parse(jsonStr)); // 反序列化
        res.end(JSON.stringify(jsonObj));
    } else {
        res.writeHead(404, {‘Content-Type‘: "text/html;charset=utf8"});
        res.write(‘抱歉 404 ,你要的页面没找到.‘);
    }
    ;
};

let server = http.createServer(onRequest);
server.listen(8001, ‘localhost‘);

分开为独立文件的 web server

一、server.js

const http = require(‘http‘);

function startServer(route, handle) {
    let onRequest = function (request, response) {
        console.log(‘Request received ‘ + request.url);
        // 传递到 route 函数
        route(handle, request.url, response);
    };

    let server = http.createServer(onRequest);

    server.listen(8001, ‘127.0.0.1‘);
    console.log(‘Server started on 127.0.0.1:8001‘);
}

module.exports.startServer = startServer;

二、router.js

const fs = require(‘fs‘);
const path = require(‘path‘);

let wwwdir = path.resolve(__dirname, ‘../www‘);

function route(handle, pathname, response) {
    console.log(‘Routing a request for ‘ + pathname);
    // 判断 handle中是否有对应的 pathname 函数
    if (typeof handle[pathname] === ‘function‘) {
        handle[pathname](response); // response作为参数传递到 handle 函数
    } else {
        response.writeHead(404, {‘Content-Type‘: ‘text/html‘});
        fs.createReadStream(wwwdir + ‘/404.html‘, ‘utf8‘).pipe(response);
    }
}

module.exports.route = route;

三、handler.js

const fs = require(‘fs‘);
const path = require(‘path‘);

let wwwdir = path.resolve(__dirname, ‘../www‘);

function home(response) {
    response.writeHead(200, {‘Content-Type‘: ‘text/html‘});
    fs.createReadStream(wwwdir + ‘/index.html‘, ‘utf8‘).pipe(response);
}

function review(response) {
    response.writeHead(200, {‘Content-Type‘: ‘text/html‘});
    fs.createReadStream(wwwdir + ‘/about.html‘, ‘utf8‘).pipe(response);
}

function api_records(response) {
    response.writeHead(200, {‘Content-Type‘: ‘application/json‘});
    let jsonObj = {
        name: "Alex",
        passwd: "123456",
        email: ‘[email protected]‘,
        age: 22
    };
    response.end(JSON.stringify(jsonObj));
}

module.exports = {
    home: home,
    review: review,
    api: api_records
};

四、app.js 主程序,模块方式调用前面的三个文件即可

const server = require(‘./server‘);
const router = require(‘./router‘);
const handler = require(‘./handler‘);

let handle = {};
handle["/"] = handler.home;
handle[‘/home‘] = handler.home;
handle[‘/review‘] = handler.review;
handle[‘/api‘] = handler.api;

server.startServer(router.route, handle);

原文地址:https://www.cnblogs.com/FHBIAO/p/10174587.html

时间: 2024-07-30 14:26:03

最近学习的 Node.js 之 http的相关文章

nodejs学习四 Node.js NPM

什么是NPM? 不知道大家注意没有,windows平台下的Node.js安装包大小才区区4M多,真可以用短小精悍来形容它,作为一种编程语言,像java一个SDK 就几十M,为什么node.js的运行环境这么小呢?这其中的微妙之处在于,它拥有一个庞大的第三方软件库. 在Node本身提供的包(原生)中没有我们要实现的功能模块的时候,我们可以去寻找下是否已经有人实现了这种功能.毕竟重复造轮子这种事情,很多人都不想干. 去哪里寻找我们想要的包呢?如果你还不知道报的名字,你可以去https://www.n

方便大家学习的Node.js教程(一):理解Node.js

理解Node.js 为了理解Node.js是如何工作的,首先你需要理解一些使得Javascript适用于服务器端开发的关键特性.Javascript是一门简单而又灵活的语言,这种灵活性让它能够经受住时间的考验.函数.闭包等特性使Javascript成为一门适合Web开发的理想语言. 有一种偏见认为Javascript是不可靠的,然而事实并非如此.人们对Javascript的偏见来源于DOM,DOM是浏览器厂商提供的用于Javascript与浏览器交互的API,不同浏览器厂商实现的DOM存在差异.

nodejs学习笔记Node.js 调试命令

3.4  调试        47 下面是一个简单的例子: $ node debug debug.js < debugger listening on port 5858 connecting... ok break in /home/byvoid/debug.js:11 var a = 1; 2 var b = 'world'; 3 var c = function (x) { debug> n break in /home/byvoid/debug.js:21 var a = 1; 2 v

从零开始学习渗透Node.js应用程序

本文来源于i春秋学院,未经允许严禁转载 0x01 介绍 简单的说 Node.js 就是运行在服务端的 JavaScript.Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台.Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好.Node.js使用Module模块去划分不同的功能,以简化应用的开发.Modules模块有点像C++语言中的类库.每一个Node.js的类库

[学习笔记]node.js中的path.extname方法

path.extname 返回path路径文件扩展名,如果path以 '.' 为结尾,将返回 '.',如果无扩展名 又 不以'.'结尾,将返回空值. path.extname('index.html'): // returns '.html' path.extname('index.'): // returns '.' path.extname('index'): // returns ''

node.js学习(2)--路由功能以及表单上传

今天按照<node.js入门>这本书学习了node的一些基础知识,包括服务器的创建,路由功能的实现,表单上传和数据处理,感觉开始明白了node.js的一些基本原理.这本书说的很详细也很基础,很适合初学者学习.node.js入门 众所周知,node跟php语言不一样,node不需要依赖于apache等服务器,因为node本身就能够构建服务器!所以,再用node开发网站之前我们首先得学会如何搭建服务器.关于node创建服务器在我之前的博客已经有介绍,这里不再赘述. 完成一个表单上传与数据处理的de

Node.js学习心得

最近花了三四周的时间学习了Node.js ,感觉Node.js在学习过程中和我大学所学的专业方向.NET在学习方法上有好多的相似之处,下面就将我学习的心得体会以及参考的资料总结归纳如下,希望对于刚入门的网友有些帮助吧!       一.Node.js简介 1.1 简介 Node.js是一个让JavaScript运行在服务器端的开发平台,它让JavaScript的触角伸到了服务器端,可以与PHP.JSP.Python.Ruby平起平坐. 但Node似乎有点不同: ● Node.js不是一种独立的语

学习 node.js 搭建web服务器

开始 学习使用 node.js 首先完成搭建一个 web服务器.myweb.js 1 var http = require('http'); 2 var url = require('url'); 3 var hostname = '127.0.0.1'; 4 var port = 3000; 5 var bodystr = ""; 6 var server = http.createServer(function(req, res){ 7 res.statusCode = 200;

Node.js(初识)

之前有了解过一点Node.js,只是一直停留在文字描述,没有真正使用过Node.js,如今因为工作的原因,开始真正接触到Node.js,也开始深入学习. Node.js具体是用来做什么的,我想一开始接触Node.js的初学者都会提出这个问题,想知道它是用来做什么的就需要知道它是个什么东西,在Node.js官网是这么介绍的:Node.js是一个基于Chrome的V8 JavaScript引擎的JavaScript运行时环境.Node.js正在向服务器端平台发展,它含有一系列内置模块,使得程序可以作