轻松创建nodejs服务器(4):路由_node.js

服务器需要根据不同的URL或请求来执行不一样的操作,我们可以通过路由来实现这个步骤。

第一步我们需要先解析出请求URL的路径,我们引入url模块。

我们来给onRequest()函数加上一些逻辑,用来找出浏览器请求的URL路径:

复制代码 代码如下:

var http = require("http");
var url = require("url");
function start() {
 function onRequest(request, response) {
  var pathname = url.parse(request.url).pathname;
  console.log("Request for " + pathname + " 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;

好了,pathname就是请求的路径,我们可以用它来区别不同请求了,这样一来我们就可以对来自/start和/upload的请求使用不同的代码来处理。

接着我们来编写路由,建立一个名为router.js的文件,代码如下:

复制代码 代码如下:

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

这段代码什么都没干,我们先把路由和服务器整合起来。

我们接着扩展服务器的start()函数,在start()中运行路由函数,并将pathname作为参数传给它。

复制代码 代码如下:

var http = require("http");
var url = require("url");
function start(route) {
 function onRequest(request, response) {
  var pathname = url.parse(request.url).pathname;
  console.log("Request for " + pathname + " received.");
  route(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;

同时,我们会相应扩展index.js,使得路由函数可以被注入到服务器中:

复制代码 代码如下:

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

运行index.js,随便访问个路径,比如/upload,就会发现控制台输出,About to route a request for /upload.

这就意味着我们的HTTP服务器和请求路由模块已经可以相互交流了。

下一节我们将实现针对不同的URL请求给予不同的反馈。

时间: 2024-10-23 02:29:10

轻松创建nodejs服务器(4):路由_node.js的相关文章

轻松创建nodejs服务器(10):处理POST请求_node.js

目前为止,我们做的服务器没有实际的用处,接下来我们开始实现一些实际有用的功能. 我们要做的是:用户选择一个文件,上传该文件,然后在浏览器中看到上传的文件. 首先我们需要一个文本区(textarea)供用户输入内容,然后通过POST请求提交给服务器. 我们在start事件处理器里添加代码,requestHandlers.js修改如下: 复制代码 代码如下: function start(response) {  console.log("Request handler 'start' was ca

轻松创建nodejs服务器(3):代码模块化_node.js

nodejs的功能块大都以模块的形式存在的. 通常会有一个统一入口index.js,然后调用不同的模块来完成我们需要的功能. 我们先来看看怎么把server.js变成一个模块让 index.js 主文件使用. 复制代码 代码如下: var http = require("http"); ... http.createServer(...); "http" 是nodejs自带的模块,我们在我们的代码中请求它并把返回值赋给一个本地变量. 我们可以用这个变量来调用 htt

轻松创建nodejs服务器(10):处理上传图片_node.js

本节我们将实现,用户上传图片,并将该图片在浏览器中显示出来. 这里我们要用到的外部模块是Felix Geisendörfer开发的node-formidable模块.它对解析上传的文件数据做了很好的抽象. 要安装这个外部模块,需在cmd下执行命令: 复制代码 代码如下: npm install formidable 如果输出类似的信息就代表安装成功了: 复制代码 代码如下: npm info build Success: formidable@1.0.14 安装成功后我们用request将其引入

轻松创建nodejs服务器(2):nodejs服务器的构成分析_node.js

紧接上一节,我们来分析一下代码: 第一行请求(require)Node.js自带的 http 模块,并且把它赋值给 http 变量. 接下来我们调用http模块提供的函数: createServer . 这个函数会返回一个对象,这个对象有一个叫做 listen 的方法,这个方法有一个数值参数,指定这个HTTP服务器监听的端口号. 为了提高可读性,我们来改一下这段代码. 原来的代码: 复制代码 代码如下: var http = require("http"); http.createSe

轻松创建nodejs服务器(1):一个简单nodejs服务器例子_node.js

我们先来实现一个简单的例子,hello world. 似乎每种语言教程的第一节都会讲这个,我们也不例外. 首先我们先创建一个项目目录,目录可自己定义,本案例的目录为 e:/nodetest/. 由于我们要搭建的是服务器,所以我把第一个文件命名为server.js. 在server.js里面输入以下代码: 复制代码 代码如下: var http = require("http");   http.createServer(function(request, response) {    

轻松创建nodejs服务器(6):作出响应_node.js

我们接着改造服务器,让请求处理程序能够返回一些有意义的信息. 我们来看看如何实现它: 1.让请求处理程序通过onRequest函数直接返回(return())他们要展示给用户的信息. 2.让我们从让请求处理程序返回需要在浏览器中显示的信息开始. 我们需要将requestHandler.js修改为如下形式: 复制代码 代码如下: function start() {   console.log("Request handler 'start' was called.");   retur

轻松创建nodejs服务器(9):实现非阻塞操作_node.js

我们要将response对象(从服务器的回调函数onRequest()获取)通过请求路由传递给请求处理程序.随后,处理程序就可以采用该对象上的函数来对请求作出响应. 我们先对server.js做出修改: 复制代码 代码如下: var http = require("http"); var url = require("url"); function start(route, handle) {   function onRequest(request, respon

轻松创建nodejs服务器(5):事件处理程序_node.js

为了对不同请做出不同的反馈,我们引入一个事件处理器的模块. 该模块命名为 requestHandlers,我们先添加start() 和 upload()两个占位函数. requestHandlers.js 代码如下: 复制代码 代码如下: function start() {     console.log("访问/star时调用这个."); }   function upload() {     console.log("访问/upload时调用这个."); }

轻松创建nodejs服务器(7):阻塞操作的实现_node.js

我们来看一下什么是阻塞操作: 我模拟一个sleep()方法来使hello star延迟10秒打印. requestHandlers.js 复制代码 代码如下: function start() {   console.log("Request handler 'start' was called.");   function sleep(milliSeconds) {  var startTime = new Date().getTime();  while (new Date().g