一 爬虫
- npm install cheerio --save
- 爬图片
const cheerio = require('cheerio');
res.setEncoding('utf8');
let rawData = '';
res.on('data', (chunk) => {// 接收数据
rawData += chunk;
// console.log(chunk);
});
res.on('end', () => { // 接收数据结束
const $ = cheerio.load(rawData);//
const reg = /^(\/\/)|^http:\/\//; // 正则 用于统一协议
$('img').each(function(i, elm) {
let url = $(elm).attr('src').replace(reg, 'https://');
let filename = url.split('/').pop();
http.get(url, (res) => {
let imgData = '';
// 图片的传输方式 是二进制传输
res.setEncoding('binary'); // 设置传输格式
res.on('data', chunk => { imgData += chunk });
res.on('end', () => {
fs.writeFile(path.join(__dirname, 'public', 'img', filename), imgData, 'binary', err => {
if (err) console.log(err);
console.log('文件下载成功');
});
});
});
});
});
二 解决跨域
前端请求的方式: “GET,HEAD,PUT,PATCH,POST,DELETE”
-
- 设置响应头
app.get('/users', (req, res) => {
res.setHeader('Access-Control-Allow-Origin', '*');
res.send('<h1>用户页</h1>');
});
-
-
cors 中间件解决跨域(npm install cors -S)
const cors = require('cors'); app.use(cors()); // 使用cors中间件实现跨域
-
-
- request 插件 (npm install request -S)
const request = require('request'); app.get('/api', (req, res) => { request(`http://api.k780.com/?${querystring.stringify(args)}`, (err, respone, body) => { if (err) console.log(err); res.send(body); })
});
- request 插件 (npm install request -S)
三 自定义包发布
- 注册NPM账号
- 切换npm源 nrm use npm
- 创建入口文件 index.js 和READEME.md项目使用说明文件
- 登陆npm
-
- 发布流程
- npm adduser
- npm publish
四 创建一个服务的方式
-
- http.createServe r内置模块创建:
http.createServer((req,res)={
}).listen(8088,()=>{})
-
- express 插件。快速搭建web(http服务)和api服务
const app =express();
app.listen(8066,()=>{
console.log(`server is running on http://localhost:8066`)
})
五 响应零散知识总结
设置响应头
res.writeHead(200, {
"content-type": "text/html;charset=utf-8"
});
-
res.send(‘这里是管理员接口’);发送数据, res.end(val);响应结束
-
http.createServer((req, res) => {})
req.on(‘data’, (val) => {})监听到前端发来的数据 -
- 第三方模块request 也是一个请求,数据使用如上
- http.get,响应数据内置模块
res.on(data’, (chunk) => {})监听前端发来的数据,拼接数据块
res.on(‘end’, () => { // 数据接收结束事件}
-
request 模块数据都保存在body里面
request(http://api.k780.com/?${querystring.stringify(args)}
, (err, respone, body) => {
if (err) console.log(err);
res.send(body);
})