nodejs

  • 基于Chrome V8引擎的Javascript运行环境
  • 使用了一个事件驱动、非阻塞式I/O模型,轻量又高效
  • 包管理器npm

文件路径

  • __dirname//不包含文件名的路径
  • __filename//包含文件名的路径

global

  • nodeJs的全局对象

modul和requi

module.exports=要模块的函数或者对象
require('文件路径')//引入模块

事件模块

let events=require('events'); //引入事件模块
let myEmitter=new events.EventEmitter(); //创建EventEmitter对象
myEmitter.on('someEvent',function (msg) {console.log(msg)}); //注册事件
myEmitter.emit('someEvent','实现事件并传递参数到注册时间的回调函数中');//第一个参数是事件,第二个参数是事件参数
setImmediate(异步事件)// setImmediate()方法可以使事件异步发生

文件系统

  • let fs=require('fs'); //引入文件系统模块
  • let readMe=fs.readFileSync('readMe.txt','utf8') //同步读取文件
  • fs.writeFileSync('writeMe.txt',readMe);//同步写入文件
  • fs.readFile('readMe.txt','utf8',function (err,data) {if (err) throw err;console.log(data);})//异步读取文件
  • fs.writeFile('writeMe2.txt',data) //异步写入文件
  • fs.unlink('writeMe3.txt',function(err){if (err) throw err;console.log(1);})//删除文件
  • fs.mkdirSync('stuff')//同步创建文件夹
  • fs.rmdirSync('stuff') //同步删除文件
  • fs.mkdir('文件名',回调函数) //异步创建文件夹
  • fs.rmdir('文件名',回调函数) //异步删除文件夹
  • fs.createReadStream(__dirname + '/readMe.txt', 'utf8'); //读取数据流

创建服务器

//通过HTTP模块,创建本地服务器
let http=require('http');
//创建本地服务器方法
let server=http.createServer(function (req,res) {
    console.log('客户端向服务器端发送请求'+req.url);
    res.writeHead(200,{"Content-type":"text/plain"});
    res.end("Server is working!");
});
//服务对象监听服务器地址以及端口号
server.listen(3002,"127.0.0.1");
console.log("server is running....");

读取HTML数据

let http=require('http')
let fs = require('fs');
//搭建服务器
let server = http.createServer(function (req, res) {
    res.writeHead(200, {"Content-type": "text/html"});
    //读取数据流
    let myReadStream = fs.createReadStream(__dirname + '/index.html', 'utf8');
    myReadStream.pipe(res);
})
server.listen(3000,'127.0.0.1');
console.log('server is running....')

读取json数据

let http=require('http')
let fs = require('fs');
//搭建服务器
let server = http.createServer(function (req, res) {
    res.writeHead(200, {"Content-type": "application/json"});
    //读取数据流
    let myReadStream = fs.createReadStream(__dirname + '/person.json', 'utf8');
    myReadStream.pipe(res);
})
server.listen(3000,'127.0.0.1');
console.log('server is running....')

路由

let http=require('http')
let fs = require('fs');
//搭建服务器
let server = http.createServer(function (req, res) {

    if (req.url==='/home' || req.url==='/'){
        res.writeHead(200, {"Content-type": "text/html"});
        fs.createReadStream(__dirname + '/index.html').pipe(res);
    }else if (req.url==='/contact'){
        res.writeHead(200, {"Content-type": "text/html"});
        fs.createReadStream(__dirname + '/content.html').pipe(res);
    }else if(req.url==='/api/about'){
        let data=[{name:"ChangJun",age:'30'},{name:"Bucky",age:'28'}]
        res.writeHead(200, {"Content-type": "application/json"});
        res.end(JSON.stringify(data))
    }
})
server.listen(3000,'127.0.0.1');
console.log('server is running....')

express框架

  • 已经封装好服务器
  • 已经封装好路由
  • 已经封装好中间件儿
  • 已经封装好网络请求...

express使用

  • npm install express --save-dev
//引入express模块
let express=require('express');
//实例化expres对象
let app=express();
//通过对象调用对应的方法

//根据用户请求的地址,返回对应的数据信息
app.get('/',function (req,res) {
    res.send('This is home page');
});
app.get('/contact',function (req,res) {
    res.send('this is contace')
});

//路由参数
app.get('/profie/:id',function (req,res) {
    res.send('您所访问的路径参数为'+req.params.id);
});

//监听服务器的端口号
app.listen(8888);

EJS模版引擎

  • npm install ejs --save-dev

app.js

//引入express模块
let express=require('express');
//实例化expres对象
let app=express();

//配置视图引擎
app.set('view engine','ejs');

//让服务器识别外部样式表
app.use('/assets',express.static('assets'));

//通过对象调用对应的方法

//根据用户请求的地址,返回对应的数据信息
app.get('/',function (req,res) {
    res.sendFile(__dirname+'/index.html');
});
app.get('/contact',function (req,res) {
    res.sendFile(__dirname+'/content.html')
});

//路由参数
app.get('/profie/:id',function (req,res) {
    let data=[{age:21,name:['ChangJun','WuXiaoHong']},{age:21,name:['ChangJun2','NiXiaoLei',]}];
    res.render('profile',{websiteName:req.params.id,data:data});
});

//监听服务器的端口号
app.listen(8888);

profile.ejs

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>homepage</title>
    <style>
        body {
            background: skyblue;
            color: white;
            padding: 30px;
        }

        h1 {
            font-size: 48px;
            letter-spacing: 2px;
            text-align: center;
        }

        h2 {
            font-size: 48px;
            letter-spacing: 2px;
            text-align: center;
        }

        p {
            font-size: 16px;
            text-align: center;
        }

        ul {
            text-align: center;
            list-style: none;
        }
    </style>
</head>
<body>
<h1>Hello ChangJun!<%= websiteName %></h1>
<h2>个人介绍</h2>
<ul>
    <% data.forEach(function (item) { %>
    <li>年龄:<%= item.age %></li>
    <% item.name.forEach(function (item) { %>
    <li>
        <%=item %>
    </li>
    <% }) %>
    <% }) %>
</ul>
</body>
</html>

常峻
88 声望2 粉丝

吃得苦中苦,方为人上人。


下一篇 »
Less初步学习