1.commonJS
commontJS是node模块化规范,这个规范有多个子规范。
modules:用于模块化导出,导出方式使用module.exports,引入使用require函数。
例如a.js文件写入
function test() {
console.log(test);
}
function test1() {
console.log(test1);
}
module.exports = {
test,
test1
}
或者
exports.test=test
exports.test1=test1
index.js文件中
const t = require('./a')
t.test()
t.test1()
该规范值node规定的模块,但是一般在相关开发过程中,使用比较多的模块化规范是使用ES6规范。
2.npm工具的使用
npm是包管理工具,用于下载、卸载和管理第三方插件使用的。
npm init 初始化package.json包依赖文件,使用npm install packagename下载相关包。相关比较简单,只要使用过vue就不解释了。
还有许多类似npm类的资源管理工具,例如rpm,nrm,yarn等。
3.ES6模块化开发
在package.json中配置模块化类型为module,此时就可以使用ES6模块化标准了 。
例如:
const a = 12;
const fn = function () {
console.log("aaa");
}
export {
a,
fn
}
使用:
import { a, fn } from './b.js'
console.log(a);
fn()
注意:es模块化和commonjs模块化不兼容
4.node内置模块
http模块
创建服务器:createServer()
//引入http模块
const http = require("http")
//创建服务器并监听相关端口号,只要访问该端口号,将会调用createServer的回调函数
//req:浏览器请求的资源
//res:服务器响应的资源
http.createServer((req, res) => {
//req.url:获取浏览器地址栏的url,注意每次都会获取到favicon.ico。
//write:向浏览器页面写出内容,end:结束打印
//打印页面
//添加项目头
res.writeHead(200, { "Content-Type": "text/html;charset=utf-8" })
res.write("12")
res.write(`
<html>
<h1>你好</h1>
<div>我是div服务器</div>
</html>
`)
res.end()
}).listen(3000, () => {
console.log("开启服务器");
})
注意:如果开启了ES模块化先要删除ES模块化,否则会报错。
http—jsonp
jsonp规定,在前端请求的时候,需要参数需要带一个名为callback的回调函数名,同时在前端写该回调函数,在请求成功之后,将会执行该回调函数,将请求结果作为参数传入该回调函数。
此时后端处理的时候,需要将url进行解析,即url中的parse方法第二个值传true,表示该url为可解析url。
此时发送给前端的是一个json字符串,前面的参数表示的是前端的回调函数名称。
http-CORS
跨域,前端使用反向代理,node使用的时候,提供了CORS跨域处理方案,即为请求头添加access-control-allow-origin
res.writeHead(200, {
"Content-Type": "application/json;charset=utf-8",
"access-control-allow-origin":"*"
})
http-get
这里获取到的数据使用的是https,引入就行了,http的get和https的get是一样的用法。自定义一个函数
res.on("data",(chunk)=>{data+=chunk}):这段表示的是get获取数据是一段一段的,我们添加一个on函数监听data数据,获取到一段就拼接一段。
res.on("end",(chunk)=>{log(data)}):这段表示的是,当获取到全部数据的时候触发该监听函数。此时的data已经获取结束了,在发给前端。
const https = require("https")
const url=require("url")
//引用url模块
http.createServer((req, res) => {
let urlOBJ = url.parse(req.url)
res.writeHead(200, {
"Content-Type": "application/json;charset=utf-8",
"access-control-allow-origin":"*"
})
if (urlOBJ.pathname == '/home') {
//在此向百度要数据
httpget((data) => {
http.end(`${data}`)
})
res.end(`120`)
}
res.end(`12`)
}).listen(3000, () => {
console.log("开启服务器");
})
function httpget(callbackHttp) {
let data=https.get('url', (res) => {
res.on('data', (chunk) => {
data += chunk
})
res.on('end', () => {
callbackHttp(data)
})
})
}
上面代码的方式比较好,直接传入一个回调函数。
http-post
用法和get类似,只是需要配置相关请求头和端口,使用的是基本请求方法request,使用的时候和get一模一样,我这里传入的也是一个函数。注意,post在函数内一定要发送数据。
http-爬虫
这里使用的是第三方的爬虫插件cheerio。我们获取百度的数据.
下载
npm install cheerio
function httpget(callbackHttp) {
let data=https.get('https://baidu.com', (res) => {
res.on('data', (chunk) => {
data += chunk
})
res.on('end', () => {
let iodata= getchoorio(data)
http.end(`${data}`)
})
})
}
function getchoorio(data){
let cheerio=cheerio.load(data)
//相关处理,具体可查cheerio文档
return cheerio
}
url模块
旧版本方式:
引入模块
const url = require("url")
parse():将url地址转化成对象
url.parse():
将对象地址转化成url
url.format()
,url.resolve():url路径拼接或者替换
url.format("http://localhost:3000/home","DemoPagesOne")//home替换成DemoPagesOne
url.format("http://localhost:3000/home/","DemoPagesOne")//DemoPagesOne拼接在home后面
新版本
通过全局的URL创建url
new URL(input[, base])
const myURL = new URL('/foo', 'https://example.org/');
// https://example.org/foo
相关方法可以通过官网查看。
querystring模块
用于将参数链表转换成对象或者将对象转化成参数列表
querystring 查询字符串 | Node.js API 文档
querystring.parse(str[, sep[, eq[, options]]])
querystring.stringify(obj[, sep[, eq[, options]]])
未完成待续.......