### 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语句中的 ? 一一对应
操作数据库数据的时候 来回传递的字段,一定和数据表中一致
```
|
|