express学习笔记之(生成项目,路由,路线处理程序,使用mysql,ejs模板)

生成项目

先生成一个package.json

cnpm init

node_modules文件夹,里面是node.js为我们提供的模块

cnpm install

安装Express脚手架

cnpm i express-generator

安装express

**cnpm install express --save**

创建了一个名为 myapp 的 Express 应用,并使用ejs模板引擎,然后安装依赖就可以生产一个项目

express --view=ejs app

使用 express 命令 来快速从创建一个项目目录

express app -e

目录说明

bin: 启动目录 里面包含了一个启动文件 www 默认监听端口是 3000 (直接node www执行即可)
node_modules:依赖的模块包
public:存放静态资源
routes:路由操作
views:存放ejs模板引擎
app.js:主文件
package.json:项目描述文件

路由

Express路径包含三种表达形式,分别为字符串、字符串模式、正则表达式

一字符串形式

app.get('/',(req,res)=>{
  res.send('这是首页')
})

二字符串模式

// 此路由路径将与`acd`和相匹配`abcd`, ? 号代表0个或者一个。
app.get('/ab?cd',(req,res)=>{
  res.send('这是abcd')
})

// '/ab+cd' 这条路线的路径将会匹配`abcd`,`abbcd`,`abbbcd`,至少一个b

// 加 * 代表任意字符

// '/ab(cd)?e' 可以加括号,包裹起来

三正则表达路径

记住,正则不需要加引号

app.get(/.*fly$/,(req,res)=>{
  res.send('这是abcd')
})

动态路由

写动态值到url上面,并且可以再req里面拿到这个动态值

// 使用 : 绑定动态值
app.get('/news/:id',(req,res)=>{
// 这个值就会存在req.params.id中
 res.send(req.params.id)
})

路径参数的名称必须由“文字字符”([A-Za-z0-9_])组成,就是不能是特殊字符,特殊字符会当成正常存在url的字符
由于连字符 - 和点 . 是按字面解释的,因此可以将它们与路由参数一起使用,以实现有用的目的。

// 这里这个 - 当成正常字符
Route path: /flights/:from-:to
Request URL: http://localhost:3000/flights/LAX-SFO
req.params: { "from": "LAX", "to": "SFO" }

Route path: /plantae/:genus.:species
Request URL: http://localhost:3000/plantae/Prunus.persica
req.params: { "genus": "Prunus", "species": "persica" }

还可以再动态路由后面加正则

Route path: /user/:userId(\d+)
Request URL: http://localhost:3000/user/42
req.params: {"userId": "42"}

路线处理程序

其实就使用get方法后面可以使用多个回调函数来进行一些处理

// next代表执行结束,只要这个next执行才会执行下一个回调
app.get('/news/:id',(req,res,next)=>{
// 进行数据处理
 req.aa = '我是靓仔'
 next()
},(req,res)=>{
  res.send(req.params.id + req.aa)
})

使用mysql数据库

let mysql = require('mysql')

// 创建连接
let connection = mysql.createConnection({
  host:'localhost',
  user:'root',
  password:'root',
  database:'shop'
})

// 进行连接
connection.connect(err =>{
  if (err) {
    console.log(err);
  }else{
    console.log('链接成功');
    
  }
})

// sql语句
let strSql = 'select * from user'

// 进行查询
connection.query(strSql,(err,result,fields)=>{
  // result 查询到的结果
  // fields 代表查询到的每个字段的信息
  // console.log(result);
  // console.log(fields);
})

// 删除表
// let strSql2 = 'drop table user'
// 删除库
// let strSql3 = 'drop database shop'
// 创建库 careate database shop

// 插入数据 insert into user (id,name,sex) values (1,小红,女)
// let strSql4 = 'insert into user (id,name,sex) values (?,?,?)'
// connection.query(strSql4,['3','小庐','女'],(err,result)=>{
  
// })
// 更新数据 update  user  set name=?,sex=?
let strSql5 = 'UPDATE user SET name = ?,sex = ? WHERE Id = ?';
connection.query(strSql5,['小肥','男',2],(err,result)=>{

})

结合使用mysql和服务器的express项目(开始)

先写封装mysql方法

let mysql = require('mysql')

let con = mysql.createConnection({
  host:'localhost',
  user:'root',
  password:'root',
  database:'shop'
})

con.connect(err =>{
  if (err) {
    
  }else{
    console.log('链接成功');
  }
})

function aamysql(sqlstr,arr){
  return new Promise( (resolve,reject)=>{
    con.query(sqlstr,arr,(err,data)=>{
      if (err) {
        reject()
      }else{
        resolve(data)
      }
    })
  })
}

module.exports = aamysql

然后再服务器中使用

let express = require('express')
let aamysql = require('./mysql')
let app = express()
app.get('/', async (req,res)=>{
  let sqlstr = 'select * from teacher';
  let result = await aamysql(sqlstr)
  // console.log(Array.from(result));
  // json方法是直接把数据变成json格式,然后发送请求
  res.json(result)
})
app.get('/getone/:oneId', async (req,res)=>{
  let sqlstr = 'select * from teacher where id=?';
  let oneId = req.params.oneId;
  // mysql查询的第二个参数是属性形式的,里面的添加或修改的值
  let result = await aamysql(sqlstr,[oneId])
  res.json(result)
})
module.exports = app

结合ejs模板

<% xxx %>:里面写入的是js语法,
<%= xxx %>:里面是服务端发送给ejs模板转义后的变量,输出为原html
<%- xxx %>:里面也是服务端发送给ejs模板后的变量,不过他会把htmt进行编译
<%# 注释标签,不执行、不输出内容

条件语句使用

// js 
app.get('/', async (req,res)=>{
  let sqlstr = 'select * from teacher';
  let result = await aamysql(sqlstr)
  // console.log(Array.from(result));
  // res.json(result)
  // 第一个参数是模板文件,第二个是要传的参数对象
  let options= {
    gender:'女',
    aa:'大傻逼',
    bb:'<a>小煞笔</a>'
  }
  res.render('index.ejs',options)
})

// ejs
    <% if(gender == '男'){%>
      <h1><%- aa%></h1>
    <%}else{%>
      <h1><%- bb%></h1>
    <%}%>

循环语句

// js
app.get('/', async (req,res)=>{
  let sqlstr = 'select * from teacher';
  let result = await aamysql(sqlstr)
  // console.log(Array.from(result));
  // res.json(result)
  // 第一个参数是模板文件,第二个是要传的参数对象
  let options= {
    gender:'女',
    aa:'大傻逼',
    bb:'<a>小煞笔</a>',
    dd:[1,2,3]
  }
  res.render('index.ejs',options)
})

//ejs
    <% for( var i =0;i<dd.length;i++ ){ %>
      <ul>
        <li><%- dd[i] %></li>
      </ul>
    <% } %>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值