这是一篇 node随笔 我的node水平 处于菜鸟的水平 写这个随笔整理一下自己现在脑中一些混乱的知识 。
这些随笔是基于我看了node.js 入门后所写下来的 我觉得这本书 浅显易懂 对于想入门node的同学 还是蛮好的
我读了这本书 很开心。
围绕实现一个功能来书写的。
目标:
1.用户可以通过浏览器使用应用
2.* 当用户请求http://domain/start时,可以看到一个欢迎页面,页面上有一个文件上传的表单。
3.* 用户可以选择一个图片并提交表单,随后文件将被上传到[http://domain/upload] (http://domain/upload),该页面完成上传后会把图片显示在页面上。
然后我们来分析一下这些模块:
1.我们需要提供web页面所以我们需要一个http服务
2.对于不同的请求,根据请求的url,我们的服务器需要给予不同的响应,因此我们需要一个路由,用于把请求对应到请求处理程序。
3.当请求服务器接收通过路由传递之后,需要可以对进行处理,因此我们需要最终的请求处理程序。
4.路由还应该能处理POST数据,并且把数据封装成更好友好的格式传递给请求处理程序,因此需要请求数据处理能力
- 我们不仅仅处理URL对应的请求,还要把内容显示出来,这意味着我们需要一些 视图逻辑供请求处理程序使用 以便将内容发送给用户的浏览器。
6.最后用户需要上传图片,所以我们需要上传处理功能来处理这方面的细节。
注释: 对于node.js来说 我们不仅仅在实现一个应用 ,同时还实现了整个HTTP服务。
一个基础的http服务
在项目中创建一个server.js的文件 实现如下代码
实现node中模块之间的调用
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;
搞定 使用命令 启动服务
node server.js
打开 http://localhost:8888/ 就可以看见一个写着hello world 的网页
然后在创建一个主文件 index.js 并在其中启动我们的http了 ,
创建index.js的内容如下
var server=require('./server')
server.start();
题外话:
服务器是如何处理请求的
我们来分析一下 我们的回调函数onRequest()的主体部分 。
当回调启动的时候,我们的onRequest函数被触发,有两个参数传入:request和response 。
他们是对象 ,你可以使用他们的方法来处理 HTTP请求的细节,并且响应请求(比如向发出请求的浏览器发回一些东西)。
所以我们的代码是:当收到请求的时候,使用response.writeHead()函数发送一个 HTTP状态200和 HTTP头内容类型(content-type),使用response.write()函数在HTTP相应主体中发送文本“hello world”
最后我们调用response.end()完成响应。
request是关于请求细节的内容 目前 我们没有涉及。
如何来进行请求的"路由"
我们要为路由提供请求的 URL和其他需要的GET和POST参数,随后路由根据这些数据来执行相应的代码
(这里的代码对应整应用的第三个部分:一系列在接收请求时真正工作的处理程序 )
因此我们需要查看HTTP请求,从中提取出请求的URL以及GET/POST参数, 这一功能应当属于路由还是服务器(甚至作为一个模块自身的功能)确实值得探讨,但这里暂定其为我们的HTTP服务器的功能。
我们需要的所有的数据 都会包含在request中,该对象作为onRequest回调函数的第一个参数,但是为了了解这些数据 我们需要了解到 url和querystring模块
我们现在来创建给路由的文件 route.js
function route(pathname) {
console.log("About to route a request for " + pathname);
}
exports.route = route;
路由给真正的请求程序
添加一个requestHandlers的模块--对每一个请求程序 做出具体的反应
网友评论