生成项目
先生成一个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>
<% } %>