使用Node建立一个Web服务
新建一个 server.js文件,输入一下代码:
var http = require('http');
http.createServer(function (req,res) {
//回调函数当浏览器发出HTTP请求是被调用
//response头,如果是html的话用 html/plain
res.writeHead(200,{'Content-Type' :'text/plain' });
res.write('Hello suck world');
//结束
res.end();
}).listen(3000);//监听3000端口
浏览器输入http://localhost:3000 会显示 hello world。
Connect 模块
Connect模块可以更好的支持服务端与客户端的HTTP请求交互。
- 一个模块化的组件叫做middleware,可以将业务应用注册到特定的情景
- 使用回调连接middleware
- 一个Connect应用使用 dispatcher 实例处理请求
- Connect不是Core Module 所以需要导入 npm install connect
npm导入Connect模块后,写一个Connect sever:
var connect = require('connect');
var app = connect();
app.listen(3000);
console.log('Server is running at http://localhost:3000');
运行,浏览器会显示 Cannot GET/,因为没有middlewre处理GET HTTP请求。
Connect middleware
middleware其实就是个有唯一签名的function
定义一个middleware需要包含三个参数:
- req: 请求信息
- res: 返回信息
- next: 连接下一个middleware
当middleware定义好后,使用app.use( functionName )注册到Connect应用。
var connect = require('connect');var app = connect();
var helloWorld = function (req,res,next) {
res.setHeader('Content-Type','text/plain');
res.end('Hello World');
};
app.use(helloWorld);
app.listen(3000);
console.log('Server is running at http://localhost:3000');```
Connect 可以注册无数个middleware,而这些middleware 可以通过next相互连接。
Connect执行middleware的顺序是先进先出FIFO,直到没有middleware可以执行或者有一个middleware没有这行next()方法。
var connect = require('connect');
var app = connect();
var logger = function (req,res,next) {
console.log(req.method,req.url);
next();
}
var helloWorld = function (req,res,next) {
res.setHeader('Content-Type','text/plain');
res.end('Hello World');
};
app.use(logger);
app.use(helloWorld);
app.listen(3000);
console.log('Server is running at http://localhost:3000');
### Mounting Connect middleware - 装配
Mounting这个功能可以使Connect根据不同的请求path作出不同的相应(类似路由)
具体方法是:在app.user( )方法加上路径参数
var connect = require('connect');
var app = connect();
var logger = function (req,res,next) {
console.log(req.method,req.url);
next();//表示继续执行下一个md
}
var helloWorld = function (req,res,next) {
res.setHeader('Content-Type','text/plain');
res.end('Hello World');
//没有next()不用连接其他md
};
var goodbyeWorld = function (req,res,next) {
res.setHeader('Content-Type','text/plain');
res.end('Goodbye World');
//没有next()不用连接其他md
}
app.use(logger);
app.use('/hello',helloWorld);//设置路径参数
app.use('/goodbye',goodbyeWorld);//设置路径参数
app.listen(3000);
console.log('Server is running at http://localhost:3000');
以上代码浏览器测试:
* http://localhost:3000/hello 输出HelloWorld
* http://localhost:3000/goodbye 输出Goodbye World
#### 总结
Connect 提供了更时髦的web服务端特性的支持,但是还是不很完善。在社区广大开发者,特别是TJ Holowaychuk的共同努力下,出现了更完善的Web开发框架包Express,Express是基于Connect的。