一、node.js是什么?
node.js 是一个基于 Chrome V8 引擎的 JavaScirpt 运行环境。
优点:Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,异步编程,使其轻量又高效。
缺点:单进程,单线程,只支持单核cpu,不能充分的利用多核cpu服务器。一旦这个进程崩掉,那么整个web服务就崩掉了。
二.基本使用
require()引入模块,返回一个模块对象;
module.exports()或者exports() 导出一个对象;
例:
a.js
//导入b
var b = require('./b')
// 对象.属性名
// 对象.方法名()
b.add()
b.js (b.js是我们自己写的一个模块,在a中导入,node.js也有很多内置模块)
function add(){
console.log('this is add')
}
//导出成员
exports.add= add
运行结果:
三.内置模块
1 .os path url模块
OS : 用来操作系统信息
path :操作文件路径
url模块:解析url模块
2.fs 文件操作模块
1.写入文件
语法:
fs.writeFile('路径及文件名',数据,function(err)){}
2.读入文件
语法:
fs.readFile(路径及文件名,[可选参数],function(err,data)){}
3. http模块
1.创建服务器
//1 .创建http 引入内置的http模块
var http = require('http')
//2.创建http服务器 调用http对象的creatServer
var server = http.createServer();
//3.监听用户请求
server.on('request',function(request,response){
console.log('接收到了响应')
//必须有响应
response.end('hello ,itcast')
})
//4.监听端口
server.listen(8080,function(){
console.log('服务器启动成功,访问 http://localhost:8080')
})
1.1判断访问页面
访问根目录和访问login页面显示不同内容
//3.监听用户请求
server.on('request',function(request,response){
// //必须有响应
// response.end('hello ,itcast')
if(request.url=='/'){
response.end('this is index')
}else if(request.url=='/login'){
response.end('this is login')
}else{
response.end('404')
}
})
1.2 解决乱码问题
//1 .创建http 引入内置的http模块
var http = require('http')
//2.创建http服务器 调用http对象的creatServer
var server = http.createServer();
//3.监听用户请求
server.on('request',function(request,response){
//设置请求头编码集 不然中文乱码
response.setHeader('content-type','text/html;charset=utf-8')
response.end("<a href='http://www.baidu.com'>点击进入百度</a>")
})
//4.监听端口
server.listen(8080,function(){
console.log('服务器启动成功,通过http://localhost:8080访问')
})
5.留言板小案例
目录结构
index.html
<body>
<ul>
<li></li>
</ul>
</body>
add.html
<body>
<h1 style="margin: auto 0;">添加留言</h1>
<div>
<form action="/doadd" method="GET">
姓名:<input type="text" name="name">
留言内容:<input type="text" name="content">
<button>提交</button>
</form>
</div>
</body>
</html>
404.html
<body>
404
</body>
app.js
//1 导入http模块
var http = require('http');
//2 导入fs文件操作模块
var fs = require('fs');
//3 导入url模块
var url = require('url')
var server = http.createServer();
//4 模拟数据
var msgs =[
{name:'张三' , content:"你好我是张三", create_at: '2017-11-14 10:30:32'},
{name:'李四' , content: "你好我是李四", create_at: '2017-11-15 10:11:14'},
{name:'王五' , content: "你好我是王五", create_at: '2017-11-16 10:22:55'}
]
//5 监听到客户端到请求
server.on('request',function(req,res){
var currentUrl = req.url
//判断页面
//index主页面
if(currentUrl == '/'){
fs.readFile('./views/index.html',function(err,data){
if (err) {
console.log(err)
return;
}
// 将上面的数据组装字符串
var htmldata = ''
msgs.forEach(function(item){
//这里使用模板字符串 `${}`
htmldata+=`<li>${item.name}:${item.content}---${item.create_at}</li>`
})
// 返回替换后的数据
res.setHeader('content-type','text/html;charset=utf-8')
res.end(htmldata)
})
}
//add主页面
else if(currentUrl == '/add'){
fs.readFile('./views/add.html',function(err,data){
if (err) {
console.log(err)
return;
}
res.end(data)
})
}
//表单提交数据页面
else if(currentUrl.indexOf("/doadd") === 0){//判断是不是表单提交的地址 是的话 取数据进行处理
var date = new Date()
date = date.getFullYear()+"-"+date.getMonth()+'-'+date.getDay()
//转换并获取传过来的参数对象
var paramsObj = url.parse(req.url,true)
var msg = {
name:paramsObj.query.name,
content:paramsObj.query.content,
create_at:date
}
//添加到数组中
msgs.push(msg)
//状态码302表示重定向
res.statusCode = 302
res.setHeader('location','/')
res.end()
}
//404页面
else{
fs.readFile('./views/404.html',function(err,data){
if (err) {
console.log(err)
return;
}
res.end(data)
})
}
})
server.listen('8080',()=>{
console.log('服务器启动成功,访问 http://localhost:8080')
})