Node.js

什么是node.js

  • Node,js 不是一门语言,不是库,不是框架

  • node.js 是一个JavaScript运行时环境,可以解析和执行JavaScript代码

  • 以前只有浏览器可以解析JavaScript代码。现在的可以完全脱离浏览器来运行,一切都归功于node.js

  • 浏览器中的JavaScript       

                 EcmaScript 

                  基本语法

                  Array

                 Object

                 function

                  var

                 if

            2 , BOM

            3.  DOM

  •  Node.js中的JavaScript

    1. EcmaScript

    2. 没有BOM,DOM

    3. 在Node这个JavaScript执行的环境中为JavaScript提供了一些服务器级别的操作API ,例如文件读写网络服务的构建,网络通信,http服务器等处理

  • 文件的读取和写入

      • 读取文件

        • require('fs').readFile('文件路径',回调函数function(error,data))

          • 成功

            • data数据

            • error null

          • 失败

            • data null

            • error 错误对象

      • 写入文件

        • require('fs').writeFile('文件路径'.'文件内容',回调函数function(error){})

          • 成功  error  null

          • 失败  error 错误对象

模块系统

  • node中只能通过require方法来加载执行多个JavaScript脚本文件

  • require加载只是执行其中的代码,文件和文件之间是模块作用域,不会有污染问题,可以避免变量命名冲突污染的问题,

  • 模块与模块进行通信用exports对象,该对象默认是一个空对象

  • 把需要被外部访问使用的成员手动挂载到exports接口对象中,谁来require这个模块,谁就可以得到模块内部的exports接口对象

      a.js

var bExport = require('./b');;

console.log(bExport.foo)

console.log(bExport.add(1,2));

b.js

exports.foo = 'hello';

exports.add = function (a,b) {

    return a+b;

}

核心模块

  • fs 文件操作模块

  • http 网络服务构建模块

  • os 操作系统信息模块

  • path 路径处理模块

http

  res.setHeader('Content-Type','text/plain;charset=utf-8');

 

  • 在浏览器中使用模板引擎

<body>

<script src="node_modules/art-template/lib/template-web.js"></script>

<script type="text/template" id="tp1">

    我是{{name}}

    我今年{{age}}

    我喜欢{{each hobbies}} {{$value}} {{/each}}

</script>

<script>

    var ret = template('tp1',{

        name: 'libeibie',

        age : 19,

        hobbies :[

            '吃',

            '喝',

            '玩'

        ]

        }

    );

    console.log(ret);

</script>

</body>

  • 在node中使用模板引擎

    • 安装

      • nmp install art-template  

  • javaScript 代码风格 参考Airbnb JavaScript Style

  • 导出exports

    • 把需要被外部访问使用的成员手动挂载到exports接口对象中,谁来require这个模块,谁就可以得到模块内部的exports接口对象

    • 导出多个成员(必须在对象中)

exports.a = 1234

exports.b = 'hello'

exports.c = function(){

console.log('ccc')

}

export.d = {

foo : 'bar'

}

module.exports = {

 foo : 'bar'

 add :'function(x,y){

  return x + y ;

}

  • 导出单个成员(拿到的是函数,字符串)

module.exports = 'hello'

以下情况后者会覆盖前者

module.exports = 'hello'

module.exports = function(x,y){

  return x + y ;

}

 

  • 导出单个成员,必须使用module.exports,因为每个模块最终return的都是module.exports,而exports只是module.exports的一个引用。但有一种赋值方式比较特殊,‘exports = module.exports’,这个是用来重新建立引用关系的

 

  • nmp常用命令(npm5以上版本不需要加--save

    • npm init 生成package.json

               npm init -y 可以跳过向导,快速生成

    • npm install (npm i)一次性把dependencies选项中的依赖项全部安装

    • npm install 包名        只下载

    • npm install --sava (npm i-S) 报名    下载并保存依赖项(package.json文件中的dependences选项)

    • npm uninstall(npm un)包名  只删除,如果有依赖会依然保存

    • npm uninstall  --save  包名     删除的同时会把依赖信息也去除

    • npm help   查看使用帮助

    • npm 命令 --help 查看指定命令的使用帮助

Express

  • Express是Node.js web应用程序开发的框架

  • 安装npm init -y, npm install  express

  • app.use('/xxx/',express.static('./xxx/')) 省略第一个参数时,访问路径可以省略/xxx/

  • nodemon是一个基于Node.js开发的一个第三方命令行工具,nodemon来帮我们解决频繁修改代码重启服务器问题

    • 安装   npm install --global nodemon

    • 使用   nodemon  xxx.js

  • hello world

var express = require('express')

var app = express()

))

app.use('/public/',express.static(path.join(__dirname, './public/')))

 

app.get('/',function (req,res) {

    res.send('Hello,nihao')

})

app.get('/about',function (req,res) {

    res.send('你好,express')

})

app.listen(3000,function () {

    console.log('app is running')

})

 

在express中使用模板引擎

  • 安装

    • nmp install --save art-template 

    • npm install --save express-art-template

  • 配置

app.engine('art',require('express-art-template'))

  • 使用

app.get('/',function(req,res){

//express默认回去项目中的views目录下找index.html

res.render('index.html',{

          title:'李贝'

})

})

  • 如果想要给默认的views试图渲染存储路径,可以

app.set('views',目录路径)

  •      重定向 res.redirect('')

  •     获取数据  req.query 只能拿get请求参数

  • 在express获取表单post请求体数据

    • 安装

         npm install  body-parser

  • 配置(配置一定要在挂载路由之前)

var bodyParser = require('body-parser')//引包

app.use(bodyParser.urlencoded({extended : false}))

//加入这个配置可通过req.body来获取表单post请求数据

app.use(bodyParser.json())

 

  • 使用

app.post('/',function(req,res){})

app.use(function(req,res){

    res.setHeader('Content-Type','text/plain')

    res.write('you posted : \n')

})

  • package-lock.json

    • 这个文件会保存node_modules中所有包的信息(版本,下载地址)这样的化重新npm install的时候速度就可以提升

    • 从文件来看,有一个lock称之为锁,他可以锁定版本号,防止重新install时自动升级新版

  • 异步编程

    • 不成立的情况

function add(x,y) {

    console.log('1');

    setTimeout(function () {

        console.log('2');

        return x+y;

    },1000);

    console.log('3')

}

console.log(add(10,20))

  • 回调函数获取结果

var ret;

function add(x,y,callback) {

    console.log('1');

    setTimeout(function () {

        console.log('2');

        ret = x + y;

        callback(ret)

    },1000)

    console.log('3')

}

add(10,20,function (a) {

    console.log(a);

})

  • mongodb非关系型数据库(最像关系型数据库的非关系型数据库系统)

    •   与node创建链接

    • mongoDB的数据存储结构

      • 数据库

      • 集合(相当于mysql中的表)

      • 文档(相当于mysql中的表记录)

    • (mongoose官网mongoosejs.com)

      • 他是基于mongoDB官网的mongodb包进一步做了封装的第三方包

      • 安装 npm i mongoose

      • 链接

var mongoose = require('mongoose');

//1.链接数据库

mongoose.connect('mongodb://localhost/test');

mongoose.Promise = global.Promise;

//设计数据库

var Cat = mongoose.model('Cat',{name : String});

for(var i = 0 ;i<100; i++){

    var Kitty = new Dog({name : 'maodou' + i});

    Kitty.save( function (err) {

        if(err){

            console.log(err);

        }

        else {

            console.log('miao');

        }

    })

}

  • 增删改查操作

var mongoose = require('mongoose');

var Schema = mongoose.Schema;

//1.链接数据库

mongoose.connect('mongodb://localhost/itcast');

//2.设计文档字段

var userSchema = new Schema({

    username : {

        type : String,

        required : true

    } ,

    password : {

        type: String,

        required: true

    },

    email : {

        type : String,

    }

})

//3.将文档结构发布为模型

var User = mongoose.model('User',userSchema)

//添加数据

// var dog = new User({

//     username: 'mantou',

//     password: '12349',

//     email: '11989@qq.com'

// })

// dog.save(function (err,ret) {

//     if(err){

//         console.log('保存失败');

//     }

//     else {

//         // console.log(ret);

//     }

// })

//查询数据

// User.find(function (err,ret) {

//     if(err){

//         console.log('查询失败')

//     }else {

//         console.log(ret)

//     }

// })

// User.find({

//     username: 'maodou'

// },function (err,ret) {

//     console.log(ret)

//     }

//     )

// User.remove({

//     username: 'mantou'

// },function(err,ret) {

//     if(err){

//         console.log('失败')

//     }else {

//         console.log(ret)

//     }

// })

 

 

User.findByIdAndUpdate('5e33149b7ff0a44654199086',{

    password: 1234567

},function (err,ret) {

    if(err){

        console.log('失败')

    }else {

        console.log(ret)

    }

})

  • node 链接mysql数据库

    • 安装 npm i mysql

    • 模板案例

var mysql      = require('mysql');

//1.创建链接

var connection = mysql.createConnection({

    host     : 'localhost',

    user     : 'root',

    password : 'root',

    database : 'node'

});

//2.链接数据库

connection.connect();

//执行数据库操作

connection.query('insert into node value(1,"李贝贝","1234")', function (error, results, fields) {

    if (error) throw error;

    console.log('The solution is: ', results);

});

//4.关闭数据库''

connection.end();

  • path路径操作模块

  • https://nodejs/org/dist/latest-v9.x/docs/api/path.html

    • path.basename(获取一个路径的文件名)

    • path.dirname(获取路径目录部分)

    • path.extname(获取路径的扩展名部分)

    • path.parse(把一个目录转化为对象)

      • root  根目录

      • dir  目录

      • base 包含后缀名的文件名

      • ext 后缀名

      • name 不包含后缀名的文件名

    • path.join(需要进行目录拼接的时候受用)

    • path.isAbsolute(判断是否是绝对路径)

  • node中的两个其他成员

    • _dirname 动态获取可以用来获取当前文件模块所属目录的绝对路径

    • _filename 动态获取可以用来获取当前文件的绝对路径

      • 他俩不受执行node命令所属路径的影响用来解决相对路径不可靠问题

 

  • Session , Cookie

    • npm i express-session

var session = require('express-session')//引包

app.use(session({          //配置 ,一定要在挂载路由之前 

  secret: 'keyboard cat',  //配置加密的字符串,在原有加密基础上和这个字符串拼接起来去加密,增加安全性,防止客户                              //端恶意伪造

  resave: false, 

  saveUninitialized: true}))  //为true的话,无论使不使用session,都会直接给你分配一个id

//使用

req.session.user = 'libeibei'    //添加

req.session.user         //获取

  • node使用md5加密

安装Npm

npm i -S blueimp-md5

引入:

var md5 = require('blueimp-md5');

使用:

var body = req.body;

// 对密码进行 md5 重复加密body.password=md5(md5(body.password));

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值