Node.js编程

本文档详细介绍了使用Node.js构建HTTP服务器和路由的过程,包括入门尝试、web应用开发,以及如何通过server.js、router.js和requestHandlers.js实现不同URL路径的请求处理。例如,对/index、/upload和/show的请求分别调用start()、upload()和show()函数。通过此教程,读者可以深入理解Node.js中的HTTP服务器和路由机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

入门尝试

在这里插入图片描述
在这里插入图片描述


web尝试

在这里插入图片描述
在这里插入图片描述


模块一——HTTP服务器server.js

在这里插入图片描述
在这里插入图片描述

var http = require("http");
//请求Node.js自带的 http 模块,把它赋值给 http 变量。

http.createServer(function(request, response) {
   
  response.writeHead(200, {
   "Content-Type": "text/plain"});//注意小括号里的语法
  response.write("Hello World");
  response.end();//结束语句是必须的
}).listen(8888);

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

function say(word) {
   
  console.log(word);
}

function execute(someFunction, value) {
   
  someFunction(value);
}

execute(say, "Hello");
//把 say 函数作为execute函数的第一个变量进行了传递。
//这里传递的不是 say 的返回值,而是 say 本身!
//这样一来, say 就变成了 execute 中的本地变量 someFunction。
function execute(someFunction, value) {
   
  someFunction(value);
}

execute(function(word){
   console.log(word);},"Hello");
//跟前一个例子相比,没有定义say函数。
//在 execute 接受第一个参数的地方直接定义了我们准备传递给 execute 的函数。
//用这种方式,我们甚至不用给这个函数起名字,这也是为什么它被叫做 匿名函数 。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

var http = require("http");

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.");
//新添加的内容,用来证明代码的有效性,表示创建服务器成功

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

var http = require("http");

function start() {
   
//把服务器脚本放到一个叫做 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;//导出start函数,注意是exports,不是export

在这里插入图片描述

var server = require("./server");//注意:./不能省略
//在这里,可以像使用任何其他的内置模块一样使用server模块:
//请求这个server文件并把它指向一个server变量,其中已导出的函数start()就可以使用了。

server.start();//使用start函数,注意:()不能省略

在这里插入图片描述
在这里插入图片描述


模块二——路由router.js

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

var http = require("http");
var url = require("url");//调用Node.js的url模块,建立一个url对象

function start(route) {
   //将路由函数route作为参数传递
  function onRequest(request, response) {
   
    var pathname = url.parse(request.url).pathname;//注意:request.url
	//调用url对象的解析函数parse,找出浏览器请求的URL路径。
	//现在可以通过请求的URL路径来区别不同的请求了。
    console.log("Request for " + pathname + " received.");
	
	route(pathname);//将pathname作为参数传递给路由
	
    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;
function route(pathname) {
   //通过请求的URL路径来区别不同的请求
  console.log("About to route a request for " + pathname);
}

exports.route = route;
var server = require("./server");
var router = require("./router");//建立一个router对象

server.start(router.route);
//调用router对象的route函数(在这里,函数作为参数传递)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

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

在这里插入图片描述
在这里插入图片描述

var server = require("./server");
var router = require("./router");
var requestHandlers = require("./requestHandlers");//定义一个新的本地变量

var handle = {
   }//创建handle对象
//在JavaScript中,对象就是一个键/值对的集合,这里的“键”是字符串类型,“值”是函数
handle["/"] = requestHandlers.start;//注意:不要()
handle["/start"] = requestHandlers.start;
handle["/upload"] = requestHandlers.upload;
//正如所见,将不同的URL映射到相同的请求处理程序上是很容易的:
//只要在对象中添加一个键为"/"的属性,对应requestHandlers.start即可,
//这样我们就可以干净简洁地配置/start和/的请求都交由start这一个处理程序处理。

server.start(router.route, handle);//handle作为参数传递给服务器
var http = require("http");
var url = require("url");

function start(route, handle) {
   //在start()函数里添加了handle参数
  function onRequest(request, response) {
   
    var pathname = url.parse(request.url).pathname;
    console.log("Request for " + pathname + " received.");

    route(handle, pathname);//把handle对象作为参数传递给了route()函数

    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;
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;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

function start() {
   
  console.log("Request handler 'start' was called.");
  return "Hello Start";//添加return语句
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值