对Node.js 的一些记录

本文是一份Node.js初学者教程,详细介绍了如何使用Node.js创建web应用,包括创建服务器、理解回调函数、封装服务器脚本、解析路由及处理不同请求。通过示例代码解释了如何定义和使用函数,以及如何组织代码以提高可维护性。
摘要由CSDN通过智能技术生成

1.Link

Node入门 » 一本全面的Node.js教程一本适合Node.js初学者的全面教程:教你如何使用服务端JavaScript来构建一个完整的web应用https://www.nodebeginner.org/index-zh-cn.html#hello-world

1.1 JavaScript中的函数传递

1.1.1 一个函数可以作为另一个函数接收一个参数,我们可以先定义一个函数,然后传递,也可以在传递参数的地方直接定义函数(匿名函数)。

var http = require("http");
//createServer调用function(request,response)这个函数
http.createServer(
    function(request, response) {
      response.writeHead(200, {"Content-Type": "text/plain"});
      response.write("Hello World");
      response.end();
}).listen(8888);
//也可写为如下方式
var http=require("http");
//定义函数
function requestFunc(request,server){
    response.writeHead(200, {"Content-Type": "text/plain"});
    response.write("Hello World");
    response.end();   
};
//触发回调函数
http.createServer(requestFunc).listen(8888);

整段代码的含义是定义了一个本地变量http,接收http模块,再进行各种操作。个人理解更像是已定义一个类,然后实例化一个对象继承这个类的所有方法,并执行。

这里引入了回调的概念,给某个方法传递了一个函数,这个方法在有相应事件发生时调用这个函数来进行回调 。

对于requestFunc的语句解析:

        当收到请求时,使用 response.writeHead() 函数发送一个HTTP状态200和HTTP头的内容类型(content-type),使用 response.write() 函数在HTTP相应主体中发送文本“Hello World"。最后,我们调用 response.end() 完成响应。

1.2 将服务器脚本封装,创建主脚本index.js

1.2.1 server.js 文件内容

var http = require("http");

function start() {
  function onRequest(request, response) {
    console.log("Request received.");
    response.writeHead(200, {"Content-Type": "text/plain"});
    response.write("Hello World");
    response.end();
  }

  http.createServer(onRequest).listen(8888);
  console.log("Server has started.");
}

exports.start = start;

1.2.2 index.js文件内内容

//找到server文件并调用 
var server=require("./server");
server.start();

1.3 解析路由

建立router.js文件,用来打印输出请求到的url

function route(pathname){
	console.log("request for"+pathname);
	
}
exports.route=route

更新server.js 文件

var http = require("http");
var url=require("url")
//start函数调用router中的route函数
function start(route) {
  function onRequest(request, response) {
    var pathname=url.parse(request.url).pathname;
    console.log("request for "+pathname);
    route(pathname);

    console.log("Request received.");
    response.writeHead(200, {"Content-Type": "text/plain"});
    response.write("Hello World");
    response.end();
  }

  http.createServer(onRequest).listen(8888);
  console.log("Server has started.");
}

exports.start = start;

更新 index.js 文件,注意:不要将router.route写成router.route(),一直报错route is not a function我还寻思了半天。

var server=require("./server");
var router = require("./router");
server.start(router.route);

 再在cmd里运行并打开浏览器运行 https://localhost:8888 就可以得到这样子的结果~

 1.4 耦合

请求处理的程序太多,因此将众多请求进行整合。

新建requestHandlers.js 文件,将 start 与 upload 等等请求进行写入

function start() {
  console.log("Request handler 'start' was called.");
  return "Hello Start";
}

function upload() {
  console.log("Request handler 'upload' was called.");
  return "Hello Upload";
}

exports.start = start;
exports.upload = upload;

更新 index.js 文件:

var router=require("./router")
var server=require("./server")
var handle={}
handle["/"]= requestHandlers.start
handle["/start"]=requestHandlers.start
handle["/upload"]=requestHandlers.upload

server.start(router.route,handle)

更新server.js 文件

var http=require("http")
var url=request("url")

function start(route,handle){
    function(request,response){
        var pathname=url.parse(request.url).pathname;
        console.log("request for "+pathname+" received");
        response.writeHead(200, {"Content-Type": "text/plain"});
        var content = route(handle, pathname)
        response.write(content);
        response.end();
    }
      http.createServer(onRequest).listen(8888);
      console.log("Server has started.");
    
}
exports.start=start;

更新router.js 文件

function route(handle,pathname){
    console.log("About to route a request for " + pathname);
    if(typeof handle[pathname] === 'function')
    {
        handle[pathname]();
    }
    else {
    console.log("No request handler found for " + pathname);
    }


}
exports.route=route;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值