A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© z-snow 中级黑马   /  2019-6-27 17:03  /  1338 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

### npm 命令行
npm -v 查看npm版本号
node -v查看node版本号

####  安装全局包(工具包)
npm install/i 包名 -g
卸载: npm uninstall i5sting_toc(md转HTML格式) -g
#### 安装项目包
初始化:npm init -y
npm install jquery bootstrap
卸载 npm uninstall  jquery zepto
《版本小于npm.5的 ,需要加上 --save或-S》

-S  --save 安装包的时候添加此后缀,默认记录到package.json文件的Dependencies属性中
-D  --save-dev 安装后默认记录到package.json文件的devDependencies属性中

1、协同开发时:将node_module 文件删除, 然后使用npm i 命令自动读取package.json中的依赖包并安装
2、项目上线时,只需要安装Dependencies 中的依赖包,使用命令: npm i --production


#### cnpm
安装全局的cnpm:  npm i cnpm -g
镜像的作用,解决npm下载速度慢的问题

#### node不能自动开启服务,需要手动开启服务
1.导入核心模块:
const http= require('http')
2、创建服务器对象
const sever = http.createSever();
3、使用on方法绑定request事件

```
server.on('requset',(req,res)=>{
  // req 表示 请求
  // res 表示 响应
  根据不同的url地址返回不同的文字  req.url 对req.url做判断 分别返回不同的文本
  //解决中文乱码的问题,渲染的时候  按照普通文本类型渲染  编码格式为 utf-8
   res.writeHeader(200, {
        'Content-Type': 'text/plain;charset=utf-8'   普通文本字符
    })
          res.writeHeader(200, {
        'Content-Type': 'text/html; charset=utf-8'   会解析html标签
    })
  res.end('中文') // 不会乱码
})
```
4、监听端口
```
server.listen('8080','127.0.0.1',function(){})
                        //端口号    ip地址      回调函数

server.listen('8080') //可以简写
```

使用art-template 渲染页面
```
1. 先下载 art-template   cnpm i art-template -S
const http = require('http')  // 导入http核心模块
const artTemplate  = require('art-template ')   //导入第三方art-template模块 不需要写路径
const server = http.createServer() //创建服务器对象
// 发起request请求  req是请求  res是响应
server.on('requset',(req,res)=>{
         const html = artTemplate('文件路径'{模版数据})
            res.end(html)  // 渲染 模版引擎渲染好的页面  

  ----------------------- 保证 导入 模版引擎的 变量名  和  调用模版引擎的 变量名一致
})
server.listen('8080','127.0.0.1',function(){}) // 监听端口开启服务
```
#### nodemon 工具
安装:npm i nodemon -g
作用:监听代码的更新,用于重启服务器

### express框架的使用
#### 1、express 的安装  cnpm i express -S
#### 2、使用express 创建服务器

```
1. 导入express
const express = require('express')
2、创建服务器
const app = express()
3、监听用户请求
app.get('/',(req,res)=>{
    res.end('123') //可以使用原生http模块的end方法,但是只能传递字符类型和buffer类型
    res.send('你好') //使用send方法可以传递字符串,数组,对象,不能传递数字
4、监听对应的端口号
    app.listen(3000,()=>{
        console.log('sever running at http://127.0.0.1:3000')
    })

```

#### 3、 express 快捷方法res.sendFile()将静态页面返回客户端
```
1.导入express
    const express = require('express')
    const path = require('path')
    const app = express()
    app.get('/', (req,res)=>{
        res.sendFile('./index.html',{root: __dirname});  //里面两个参数,可以使用相对路径拼接
        res.sendFile(path.join(__dirname,'./'index.html));  //sendFile里一个参数,必须是绝对路径
    });
    app.listen(3000)
2、
```

#### 4、静态资源托管
1.app.use() :作用是注册中间件
express.static(托管的目录文件)  : 将制定的目录托管为静态资源目录,指定目录下的所有文件就可以在浏览器中直接访问
express.static('/views') :将views下面的左右文件托管,在浏览器中打开就不需要加上/views ,直接搜索index.html即可,是express里面唯一的内置中间件
2、app.use(‘虚拟路径',express.static(托管的目录文件))  :
app.use('/node_modules', express.static('./node_modules'))
app.use('/page',express.static('./views')) :在浏览器中搜索时,省略/views必须加上/page/index.html
**注意** express.statc('./node_modules') 这里的点必须加上
app.use(express.static('./views'))
app.use('/node_modules', express.static('./node_modules'))
app.use('/semantic', express.static('./semantic'))



#### 5、模板引擎渲染页面
方式一:使用ejs模板引擎
1、安装ejs  使用命令行: cnpm i ejs -S
```
const express = require('express')
const app = express()
app.set('view engine','ejs')  //使用模板引擎固定格式
app.set('views', './a')  //注意:不写这句代码,当前项目中必须有views这个文件夹,如果没有,则需要设置这句代码,模板会到a文件夹中找res.render()方法中设置的模板页面
app.get('/',(req,res)=>{
    res.render('模板页面',{要渲染的数据})  //模板页面的后缀名必须是ejs
})
app.listen(3000)
```

2、方式二,使用art-template
1、安装art-template  使用命令行: cnpm i atr-template express-atr-template -S
安装的是两个包,中间逗号隔开

2
```
const express = require('express')
const app = express()
app.engine('html',require('express-art-template')) //自定义模板引擎
app.set('view engine','html')  
app.set('views','./a') //注意:不写这句代码,当前项目中必须有views这个文件夹,如果没有,则需要设置这句代码,模板会到a文件夹中找res.render()方法中设置的模板页面
app.get('/',(req,res)=>{
    res.render('模板页面',{需要渲染的数据})  //模板页面的后缀名必须跟app.set('view engine','html')  里面的第二个参数一致,通常使用html,也可以自己定义
})
app.listen(3000)
```


#### 6、后端路由
定义:前端请求的url地址,都对应这后端的一个处理函数,url到函数之间的对应关系,称为后端路由
源文件中有三个get请求,使用后端路由抽离,让页面只负责开启服务器
```
const express = require('express')

const app = express()

app.get('/', (req, res) => {
  res.sendFile('./views/home.html', { root: __dirname })
})

app.get('/movie', (req, res) => {
  res.sendFile('./views/movie.html', { root: __dirname })
})

app.get('/about', (req, res) => {
  res.sendFile('./views/about.html', { root: __dirname })
})

app.listen(3000, () => {
  console.log('server running at http://127.0.0.1:3000')
})
```
2、新建js文件,只写路由对象的对应规则
```
1. const express = require('express')
2. const router = express.Router()  //路由中间件
router.get('/', (req, res) => {
  res.sendFile('./views/home.html', { root: __dirname })
})

router.get('/movie', (req, res) => {
  res.sendFile('./views/movie.html', { root: __dirname })
})

router.get('/about', (req, res) => {
  res.sendFile('./views/about.html', { root: __dirname })
})

module.exports = router //将路由对象暴露出去,让对应的服务器文件导入使用
```
3、修改之后的服务器页面
```
const express = require('express')

const app = express()

// 将路由对象的js文件  导入
const router = require(将路由对象的js文件)
app.use(router) //注册路由中间件

app.listen(3000, () => {
  console.log('server running at http://127.0.0.1:3000')
})
```

#### 7、中间件
本质:是一个处理函数,但是里面通常有三个参数(req,res,next)
req:请求对象
res:响应对象
next: next()一个函数,表示调用下一个中间件的方法

分类:
1.应用级别的中间件 app
2、路由级别的中间件  express.Router()
3、唯一内置中间件 express.static()
4、错误中间件  有四个参数(err,req,res,next)
5、第三方中间件

#### 8、数据库
安装数据库:cnpm i mysql -S
```
//导入数据库模块
const mysql = require('mysql')
const con = mysql.createConnection({
    host: '127.0.0.1',
    user: 'root',
    password: 'root',
    database: '数据库名称'

})
con.query(sql语句,[传递的参数],(err,data)=>{})
sql语句:
R查询 -  select * from  数据表(users)
C新增 -  insert into 数据表 set ?   前提得去 定义新增的数据
U修改  -  update  数据表 set ?  where  id = ?  
D删除  - delete from 数据表  where id = ?
con.query 中参数- 是sql语句 ; 参数二 数据;  参数三  回调函数
sql语句中出现的?  一定要和 query 的第二个参数对应一致 多个问号出现的时候,将数据方式在数组中,放置的位置 一定和 sql语句中的 ? 一一对应
操作数据库数据的时候  来回传递的字段,一定和数据表中一致  
```

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马