/**
* @author clearlove
* @aim 演示本地搭建服务器
*/
//引入http
var http = require('http');
//创建服务器
const server = http.createServer(function (req, res) {
console.info(`客户端向服务端发送请求 ${req.url}`)
//将服务器给我们的信息接收到
res.writeHead(200,{"Content-type":"text/plain"})
res.end('server is working...')
})
//监听本地端口为8888的请求
server.listen(8888, '127.0.0.1');
//运行该js的时候 直接打印
console.info('server is running...')
这里我们监听8888端口,当该端口被使用的时候,直接将服务器给我们的一句话打出来
ok没有问题,本地服务跑起来了,当然我们可以返回需要json数据或者是html页面都是可以的。
可能看完之后你们想骂人了,说的是啥啊,其实说人话就是,buffer就是一个盒子,可以缓存一些一小块一小块的数据,存储下来,但是你要将数据流给页面要通过Stream,这样说可能会好一点。其实这个过程的中间还有一个管道事件,这里不说了,说了更晕
看代码:
/**
* @author clearlove
* @aim 演示读写数据流
*/
//引入fs
var fs = require('fs')
const myreadstream = fs.createReadStream(__dirname + '/readMe.txt', 'utf-8')
//写入文件流
const mywritestream = fs.createWriteStream(__dirname + '/writeMe.txt')
//这里直接打印myreadstream的话 其实返回来的是一个对象,而不是具体我们实现的内容
//console.info(myreadstream)
//展示内容
var timer = 0;
myreadstream.on('data', function (chunk) {
timer++
console.info(`=============接受到的 ${timer} 部分数据=============`)
mywritestream.write(chunk)
})
//运行的结果是:一部分一部分的展示出来(前提是你的数据内容足够多)
运行结果:
可以看到其实是一段一段写的内容,这个时候的writeMe.txt里面就是我们的readMe.txt里面的内容,你们自己运行一下就知道了。
/**
* @author clearlove
* @aim 演示管道事件读写数据流
*/
//引入fs
var fs = require('fs')
const myreadstream = fs.createReadStream(__dirname + '/readMe.txt', 'utf-8')
//写入文件流
const mywritestream = fs.createWriteStream(__dirname + '/writeMe2.txt')
//使用管道事件
myreadstream.pipe(mywritestream)
这里这句话就可以将内容直接写入到另一个名字为writeMe2.txt的文件里面。我们看一下文件:
这里就不打开这个writeMe2.txt文件了,内容有点多,截图了你们看着也没什么意思。你们自己运行一下就可以了。
既然我们知道了怎么创建服务器,知道怎么读取文件,也知道怎么使用管道事件了,那么我们写一个效果,搭建一个服务器,写一个本地的文本,将本地的文本输出到页面上
/**
* @author clearlove
* @aim 做一个小东西
*/
//引入fs
var fs = require('fs')
var http = require('http')
/**
* 搭建一个服务器
*/
var server = http.createServer(function (res,res) {
res.writeHead(200,{"Content-type" : "text/plain"})
const myreadstream = fs.createReadStream(__dirname + '/readMe.txt', 'utf-8')
myreadstream.pipe(res)
})
server.listen(8888,'127.0.0.1');
console.info("server is running...")
看效果:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>http_demo</title>
<style>
body{
background: #307ac6;
text-align: center;
color: aliceblue;
margin: 10% 10%
}
p{
font-size: 2rem
}
</style>
</head>
<body>
<h1>
WelCome to CSDN of clearlove
</h1>
<p>
If you like my article, you can follow my blog
</p>
</body>
</html>
/**
* @author clearlove
* @aim 做一个小东西
*/
//引入fs
var fs = require('fs')
var http = require('http')
/**
* 搭建一个服务器
*/
var server = http.createServer(function (res, res) {
/**
* 这块处理的是 第二次请求的/favicon.ico 的情况
*/
if (res.url !== '/favicon.ico') {
res.writeHead(200, { "Content-type": "text/html" })
const myreadstream = fs.createReadStream(__dirname + '/views/http_demo.html', 'utf-8')
myreadstream.pipe(res)
}
})
server.listen(8888, '127.0.0.1');
console.info("server is running...")
/**
* @author clearlove
* @aim 做一个小东西
*/
//引入fs
var fs = require('fs')
var http = require('http')
/**
* 搭建一个服务器
*/
var server = http.createServer(function (res,res) {
res.writeHead(200,{"Content-type" : "application/json"})
const myreadstream = fs.createReadStream(__dirname + '/data/demo.json', 'utf-8')
myreadstream.pipe(res)
})
server.listen(8888,'127.0.0.1');
console.info("server is running...")
-运行起来,看结果:
乱码就乱码吧,也不知道google现在咋那么多事。我这里说一下,json数据和obj也就是我们说的对像个是的数据本质是一样的,只是很像,很多人天真的以为是一个东西,obj里面的key是可以不加引号的,value也可以是单引号直接写,但是json不管是key还是value都必须引号的,这里强调一下。当然这里你也可以直接使用html的渲染方式或者使用plain的方式也就是文本的方式,都是可以渲染出来的。
npm
像我这种爱国的人一般看到这种语言我是拒绝的,但是为了学它也没办法,意思就是说呢你想创建一个package文件的话,名字和版本是必须的,不然你就别用了。
这里解释一下这个黑框的问题,我之前写教程的时候用的是mac写的,然后中间mac要写项目,所以教程想继续写的话只能用我的windows写,所以逼格就显得没有那么高了,但是效果和结果都是一样的,所以不要在意这些细节。 -现在既然有了package.json了以后 我们就可以直接安装自己想要的东西了。我们举个例子: 安装第三方js
-这里有人就说了,我怎么知道命令啊,那么多的js文件,很多办法,最快的办法是问我,当然是不可能的,最快的办法是百度,其次是自己直接到npm的官方网站找这个js的安装方法
我们直接打开自己需要的 放个链接吧,点击进去自己看 首先是介绍一大堆说这个js多好,多快,多轻便(没用),下面有一个node介绍的,里面就是他的安装方式,ok不废话了
我们可以看到,一个jquery文件就在里面了,这个时候我们就可以直接使用jquery了。
{
"name": "nodelearn",
"version": "1.0.0",
"description": "this is nodelearnpro",
"main": "node_demo.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "clearlove",
"license": "ISC",
"dependencies": {
"jquery": "^3.4.1"
}
}
{
"name": "nodelearn",
"version": "1.0.0",
"description": "this is nodelearnpro",
"main": "node_demo.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "clearlove",
"license": "ISC",
"dependencies": {},
"devDependencies": {
"jquery": "^3.4.1"
}
}
{
"name": "nodelearn",
"version": "1.0.0",
"description": "this is nodelearnpro",
"main": "node_demo.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "clearlove",
"license": "ISC",
"dependencies": {},
"devDependencies": {}
}
这里有人说你的文件怎么多了两个,第一个是记录我们的第三方js的,最后一个是按照开发者的角度记录第三方js的,这里多是因为我前面安装了,卸载了以后里面就是空的了,但是key还在,上面的两个就不用解释了吧。
这篇文章就写到这儿吧,梳理知识点着实挺累的,剩下的下一篇我会更新的一下关于通信,介绍一下怎么用nodejs跑一个本地的服务,写一个简单的通信,喜欢的可以关注一下,以上写的不对的,还希望及时联系我,我及时纠正,共勉,感谢!