node.js简介+使用+留言板案例

一、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

运行结果:

image-20210404104522918

三.内置模块

1 .os path url模块

OS : 用来操作系统信息

path :操作文件路径

url模块:解析url模块

image-20210404104156275

2.fs 文件操作模块

1.写入文件

​ 语法:

fs.writeFile('路径及文件名',数据,function(err)){
    
    }

2.读入文件

语法:

fs.readFile(路径及文件名,[可选参数],function(err,data)){}

image-20210404104236762

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')
})

image-20210404104252595

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访问')
})

image-20210404104306349

5.留言板小案例

目录结构

image-20210404104328353

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')
})

效果图:

image-20210404104709981

猜你喜欢

转载自blog.csdn.net/weixin_45894479/article/details/115426299