学习Node.js全栈框架MEAN-03-第一个Web服务

使用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
dispatcher

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的。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容