剧场模式
首页后端轻松学 nodejs - 基础篇

轻松学 Node.js - 基础篇 #14 web 服务器 part 6 重构路由代码

下载源码hfpp2012发布于Nodejs3593 次点击播放时长:09:42
6

注意:

404页面这个部分不对,它的状态码应该是 404,而不是 200(疏忽之处,请各位看官自行修正)

app.js

var server = require('./server');
var router = require('./router');
var handler = require('./handler');

var handle = {};
handle["/"] = handler.home;
handle['/home'] = handler.home;
handle['/review'] = handler.review;
handle['/api/v1/records'] = handler.api_records;

server.startServer(router.route, handle);

server.js

var http = require('http');
var fs = require('fs');

function startServer(route, handle) {
    var onRequest = function(request, response) {
        console.log('Request received ' + request.url);
        route(handle, request.url, response);
    }

    var server = http.createServer(onRequest);

    server.listen(3000, '127.0.0.1');
    console.log('Server started on localhost port 3000');
}

module.exports.startServer = startServer;

router.js

var fs = require('fs');

function route(handle, pathname, response) {
    console.log('Routing a request for ' + pathname);
    if (typeof handle[pathname] === 'function') {
        handle[pathname](response);
    } else {
        response.writeHead(200, { 'Content-Type': 'text/html' });
        fs.createReadStream(__dirname + '/404.html', 'utf8').pipe(response);
    }
}

module.exports.route = route;

handler.js

var fs = require('fs');

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

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

function api_records(response) {
    response.writeHead(200, { 'Content-Type': 'application/json' });
    var jsonObj = {
        name: "hfpp2012"
    };
    response.end(JSON.stringify(jsonObj));
}

module.exports = {
    home: home,
    review: review,
    api_records: api_records
}
10 条回复
  • JimmyWang #1

    感谢你的视频,请问;
    请问你视频收到的每个请求为什么没有favicon?我的如下
    receive request/api/catstring
    request path name is /api/catstring
    receive request/favicon.ico
    request path name is /favicon.ico

  • hfpp2012 #2

    不用管它,可以忽略,那个是浏览器自己加上的

  • WangJefy #3

    力挺随风!

  • hfpp2012 #4

    多谢

  • ahong #5

    其实没搞懂为啥要分出handler这个模块

  • hfpp2012 #6
    ahong #10 回复

    应该是为了更好的组织代码,代码维护性上来说的

  • ahong #7
    hfpp2012 #10 回复

    好吧,谢谢

  • dingjian33 #8

    typeof handle[pathname] === 'function' 这段不怎么理解 后面的‘function’什么意思

  • hfpp2012 #9
    dingjian33 #10 回复

    typeof 是查看它的类型,你可以打印出来看看。

  • dingjian33 #10
    hfpp2012 #10 回复

    好的 谢谢

想拥有自己的网站,并成为一名自由的讲师?
支付宝付款
扫码打赏 16.8 元起加我微信拉入微信群

加我微信:15014006126

加 QQ 群:697272886

打赏的朋友或 Pro 学员获得特权

  • 加我微信拉你进微信群,享有更多互动和人脉资源;

  • 和程序员老兵我成为微信好友;

  • 不定期技术分享和视频问题解答

相似的视频
轻松学 Node.js - 基础篇 #13 web 服务器 part 5 路由

轻松学 Node.js - 基础篇 #13 web 服务器 part 5 路由

免费播放时长:05:37

3472 次点击

轻松学 Node.js - 基础篇 #9 web 服务器 part 1 介绍

轻松学 Node.js - 基础篇 #9 web 服务器 part 1 介绍

免费播放时长:05:32

4083 次点击

轻松学 Node.js - 基础篇 #10 web 服务器 part 2 响应 JSON

轻松学 Node.js - 基础篇 #10 web 服务器 part 2 响应 JSON

免费播放时长:03:44

3643 次点击

轻松学 Node.js - 基础篇 #11 web 服务器 part 3 响应 HTML 页面

轻松学 Node.js - 基础篇 #11 web 服务器 part 3 响应 HTML 页面

免费播放时长:03:47

3553 次点击

© Rails365 | 隐私条款 | 服务条款 | 加盟本站 | 粤ICP备15004902号 | 在线学员:28

Top