Node.js Up and Runing 学习日记(三)
npm install express
var express = require('express')
var app = express.createServer()
app.get('/',function(req, res) {
res.send('Welcome to the pageHome')
}).listen(8000)
please come to my Home
调用 Server() 来创建服务器, listen() 监听指定端口
不需要用Express为请求事件指定监听器,而是通过HTTP匹配的方式来调用对应的方法
调用get()方法为匹配的第一个参数所指定的URL的GET请求指定了回调函数
根据HTTP请求的不同方法进行过滤,根据特定的URL进行过滤
到目前为止,这个新的服务器只相应URL为"/"的GET请求
var express = require('express')
var app = express.Server()
app.listen(9000)
var tweets = []
app.get('/',function(req, res){
res.send('Welcome to Node Twitter')
})
app.post('/send',express.bodyParser(), function(req, res){
if (req.body && req.body.tweet) {
tweets.push(req.body.tweet)
res.send({status:"ok",message:'tweet recevied'})
} else {
res.send({status:"ok",message:'tweet recevied'})
}
})
app.get('/tweets', function(req, res){
res.send(tweets)
})
在post()中,跟在URL后面的参数是一个中间件
中间件: 一小段特定的代码,位于原始请求事件与我们给指定的路由之间,对一些通用功能进行代码重用
express.bodyParser()为req对象添加了新的属性,即req.body,包含了POST数据对应的对象express.bodyParser()中间件只能够处理POST方法的数据,而且要求HTTP头的Content-Type属性是application/x-www-form-urlencoded或者json,这两种格式很容易解析成key/value值,并保存req.body对象中
判定是否找到数据,如果存在,再查找tweet,找到了就存放到数组中,并且返回一个JSON字符串表示成功,反之返回表示失败的JSON
var http = require('http'),
assert = require('assert')
var opts = {
host: 'localhost',
port: 8000,
path:'/send',
method: 'POST',
headers: {'Content-Type':'application/x-www-form-urlencoded'}
}
var req = http.request(opts, function(res){
res.setEncoding('utf8')
var data = ""
res.on('data', function(d){
data += d
})
res.on('end',function(){
assert.strictEqual(data,'{status:"ok",message:"tweet recevied"}')
})
})
req.write('tweet-test')
req.end()