目标

向一个input输入框,将value通过ajax的get/post方法传到服务器,服务器再返回一个值。

实现

我们需要一个HTTP服务器

对于不同的请求,根据请求的URL,我们的服务器需要给予不同的响应,因此我们需要一个路由,用于把请求对应到请求处理程序(request handler)

当请求被服务器接收并通过路由传递之后,需要可以对其进行处理,因此我们需要最终的请求处理程序

我们需要从html文件里提取数据以及展示服务器传入的数据,因此需要将html和服务器结合起来

第一步:搭建本地服务器

server.js

node.js开发服务器 nodejs写服务器_html

关于nodejs的模块机制,可以参考这篇文章`深入浅出Node.js(三):深入Node.js的模块机制,讲得非常详细和透彻

http.createServer(onRequest).listen(8888)创建了一个服务器,监听端口8888,onRequest即为端口接收到请求时进行处理的回调函数。

在这个回调函数里,我们有两个参数req、res即接收到的请求和作出的响应。

通过url.parse(req.url).pathname解析出请求的路径,之后我们将根据不同的路径指向不同的处理函数,即路由。

因为get和post方法传入参数的方式不一样,因此我们分别对其处理,get方法我们知道传参数是在url后面用?name=value这样的形式表示,因此我们还是通过解析请求地址来获得url.parse(req.url).query。

post方法传参数是在body中,因此可以通过data和end方法监听数据的接收,直到接收完毕。

第二步:创建路由

router.js

node.js开发服务器 nodejs写服务器_数据_02

这一步就将服务器接收到的请求传递给路由进行处理,上一步我们注意到数据接收完毕后使用了函数route(handle, pathname, response, postData)就是把请求放在路由里了,同样根据路径的不同,在路由里选择不同的处理函数handle[pathname](response, postData);

requestHandler.js

node.js开发服务器 nodejs写服务器_node.js开发服务器_03

这里就定义了不同的处理函数的具体内容,比如这里有start,upload,init三种处理方式,怎样将这三种方式对应到不同的路径请求呢?

index.js

node.js开发服务器 nodejs写服务器_nodejs将本地文件写入服务器_04

这里才是我们最重要的入口文件,handle = {}里面就是以键名和键值的方式将请求路径与处理函数对应起来。比如在地址栏里输入"http://loacalhost:8888/public/index.html"就会调用init这个函数,这样结构就很清楚了吧

再理一下思路:

首先启动服务器,在终端里输入node index.js,初始化处理函数后,进入server.js里监听发送到端口8888的请求,将请求地址和请求数据都传递给路由route.js,路由判断请求是否符合要求,再分门别类地传递给对应的处理函数,这样就完成啦。

再看一下index.html文件

node.js开发服务器 nodejs写服务器_服务器_05

这里一看就明白了。

以上就是nodejs新手尝试的一个小例子,虽然很简陋,也梳理了一下大概流程,当然真的项目中会结合express框架来应用,就更加方便了。