Node.js学习总结
Node.js不是一门语言,也不是库,不是框架,它是一个javascript运行时的环境
node.js的构成:
- 没有Dom
- 没有Bom
- 只有ECMAScript
特性:
- 事件驱动
- 非阻塞IO模型,即异步
- 轻量和高效:Node.js的解析引擎是Google Chrome中的v8引擎,目前是公认的解析javascript最快的
主要用途:
- web服务器后台
- 命令行工具,比如:npm,git,hexo等
搭建简单的服务器
首先需要加载http以及创建server服务器:
//1.加载http
var http = require('http')
//2.创建一个web服务器
var server = http.createServer()
接着,注册服务器的request请求事件,每当客户端请求过来,都会触发一次服务器的request事件,然后执行回调函数:
server.on('request', function (request, response) {
var url = request.url
if(request.url == '/') {
response.write('index')
}else if(request.url == '/login') {
response.write('login,你好啊')
}else if(request.url == '/register'){
response.write('register')
}else if(request.url == '/items'){
response.write(JSON.stringify(items)) //只支持2进制和字符串
}else if(request.url == '/html') {
response.setHeader("Content-Type","text/html;charset=utf-8")
//text-plain 普通文本
//text-html 以html格式解析文本
response.write('<p>hello html<a href="#">你好</a></p>')
}
else{
response.write('抱歉,你访问的页面不存在')
}
response.end()
})
服务器运行,还需要listen函数监听,端口号随便设置,只要不被占用就可以
server.listen(3000,function () {
console.log('server is running...')
})
现在,我们命令行输入 node http.js即可开启服务器,打开浏览器,输入网址,就会展示上面的内容
目前只能实现在页面输出自己输入的内容,想要读取html文件,还需要结合fs,发送文件中的数据,具体如下:
var fs = require('fs')
接下来,新建几个文件夹以及html文件,txt文件,img图片等等用来测试,代码如下:
var url = request.url //url统一资源定位符
if(url === '/') {
//读文件
fs.readFile('./resource/inde.html', function (err,data) {
if(err) {
response.setHeader("Content-Type","text/html;charset=utf-8")
response.end('<h1>页面加载失败,请稍后重试!</h1>')
} else {
response.setHeader("Content-Type","text/html;charset=utf-8")
// data默认是二进制数据,可以转为字符串格式
response.end(data) //支持二进制和字符串,所以不用转
}
})
} else if(url === '/img') {
fs.readFile('./resource/img.jpg', function (err,data) {
if(err) {
response.setHeader("Content-Type","text/html;charset=utf-8")
response.end('<h1>页面加载失败,请稍后重试!</h1>')
} else {
response.setHeader("Content-Type","image/jpeg")
// data默认是二进制数据,可以转为字符串格式
response.end(data) //支持二进制和字符串,所以不用转
}
})
}
在这里,request.url==='/'即是主页,输入正确的路劲即会显示出来,错误的则显示 页面加载失败,请稍后重试
现在已经能基本访问文件了,但是,写的内容是死的,也就是说这个服务器只能响应我们规定的那几个文件,当添加新的文件的时候就不管用了,应该创建动态读取文件的方法,方法很简单,稍微改变一下就好了:
var wwwUrl = 'F:/www'
// response.setHeader("Content-Type", "text/html;charset=utf-8")
if (url === '/') {
url = '/index.html'
}
fs.readFile(wwwUrl + url, function (err, data) {
if (err) {
fs.readFile(wwwUrl + '/404.html', function (err, data) {
response.end(data)
})
return
}
response.end(data)
})
我们规定一个最外层文件夹地址,在哪里不重要,当它改变位置时,只要改wwwUrl就可以,如上面这般,url是根据我们在地址栏输入的内容而动态变化的,相应的fs读取文件的路径也在动态改变。接下来,当我们有新增文件,也能够进行访问。
最后,可以看到,上面的代码有这么一句:
response.setHeader("Content-Type", "text/html;charset=utf-8")
这是告诉浏览器,发送的内容是什么数据类型,有html,纯文本,图片等等特别多,推荐一个网站HTTP Content-Type对照表,里面有上百种格式。