- 学习如何使用nodejs向其他web服务器发送请求是十分重要的
- http已经演变成为并非仅用于交换最终渲染,展示给用户的标记文本,而且它还是服务器在不同网络环境传递数据的一种方式,同时,json 因其语法衍生自js线性对象,也快速成为http默认的标准数据格式,这也是nodejs在服务器端的优势之一
- 这里我们会学习到如何查询twitter API 获取json数据,并解码成为一种数据结构,以方便对其进行迭代后生成人类可读的形式
创建模块
- 惯例,创建一个项目,创建一个package.json文件
- 不一一赘述
发送一个简单的HTTP其你去
- 我们通过http模块中得request静态方法穿件一个Client对象
- 我们先回顾之前的http服务器
const http = require('http');
http.createServer(function (req, res) {
res.writeHeader(200);
res.end('hello world');
}).listen(3000);
- 再写一个客户端来抓取响应内容并打印在控制台
const http = require('http');
http.request({
host: '127.0.0.1',
port: '3000',
url: '/',
method: 'GET'
}, function (res) {
let body = '';
res.setEncoding('utf8');
res.on('data', function (chunk) {
body += chunk;
});
res.on('end', function () {
console.log('\n We got:\033[96m' + body + '\033[39m\n');
});
}).end();
-
- 上述代码中,首先调用了
request
方法,此方法用于初始化一个新的http.Client Request对象
- 上述代码中,首先调用了
我们手机信息快的方式和此前在服务器端收起客户端消息块的方式一样,连接的远程服务器会返回不同的数据块,我们需要将他们全部收集词能得到完整的响应,当然,也有可能所有的数据在一个data事件中都到达了,只不过我们无从所得
所以在这里我们要监听end事件,然后将body数据打印到控制台
我们还通过响应对象上编码格式设置成了utf8,当然如果是在获取图片就不行了
发送数据
在之前的例子中,我们调用完request 之后,还需要调用end
原因是在创建完一个请求之后,在发送给服务器钱还可以和request对象进行交互
这次已经是创建表单,但是我们这次用 stdin来处理
-
服务器端处理表单
const qs = require('querystring'); const http = require('http'); http.createServer(function (req, res) { let body = ''; req.on('data', function (chunk) { body += chunk; }); req.on('end', function () { res.writeHeader(200); res.end('Done'); console.log('\n got name: \033[90m' + qs.parse(body).name + '\033[39m \n'); }); }).listen(3000);
客户端也要做对应处理
let http = require('http'), qs = require('querystring');
function send(theName) {
http.request({
host: '127.0.0.1',
port: 3000,
url: '/',
method: 'POST'
}, function (res) {
res.setEncoding('utf8');
res.on('end', function () {
console.log('\n \033[96m request complete! \033[39m');
process.stdout.write('\n your name: ');
});
}).end(qs.stringify({name: theName}));
}
process.stdout.write('\n your name: ');
process.stdin.resume();
process.stdin.setEncoding('utf8');
process.stdin.on('data', function (name) {
send(name.replace('\n', ''));
});
注意上述代码是通过end方法发送的,和我们在服务器创造响应消息方式y一样
图示
第二个 没有显示your name 是客户端没有走到结束..但是回车以后还是可以提交到服务端
第三个是通过浏览器直接访问没有携带任何数据所以是 undefined
获取推文
- 我们创建tweets命令,该命令接收一个搜索参数,然后将最近的相关话题推文展示出来
- Twitter开放的API文档,URL是这样的
http://search.twitter.com/search.json?q=blue+angels
这个已经过期了...更新版本了
The Twitter REST API v1 is no longer active. Please migrate to API v1.1. https://dev.twitter.com/docs/api/1.1/overview.
- 现在貌似用Twitter的API 需要进行审查了 ,就暂时搁浅了这个小的demo