- url 和 资源的 映射 ( 一一对应 )关系
前端 发送一个请求 必须要有一个请求地址url
后端 根据这个前端请求的地址url, 响应一些数据回去.
- express简单使用 (了解)
1) 新建一个项目文件夹 app
2) 进入这个文件夹 初始化项目 生成 package.json
cd app
npm init -y
3) 局部安装(在当前项目文件夹里面安装)express,并且保存到 依赖列表 里面
cnpm i express --savex
备注: 装完以后 会生成一个 node_modules 文件夹, express就在里面(npm 下载的第三方模块都在里面)
4) 在当前目录新建一个 app.js 文件 在这个文件里面来 写 express 的代码
a) 引入express模块
const express = require('express');
b) 使用express() 方法 创建一个 app 应用
const app = express();
c) 使用 app 来 接收前端的请求 (get方式 post方式)
app.get('前端请求的url', (req, res) => {
// req : 请求对象 负责接收前端(浏览器 )发送过来的数据
// res: 响应对象 负责响应数据给前端(后端给前端发送数据)
})
d) 监听端口
app.listen(端口号, () => {
console.log('服务器启动成功...')
})
- express-generator脚手架的使用(快速生成一个项目的工程目录)
1) 全局安装 express-generator (安装它的目的 是为了 运行 express命令 )
cnpm i express-generator -g
备注: 可以运行命令 express --version 检测一下 是否能使用
2) 可以使用 express 命令 来快速从创建一个项目目录
express 项目文件夹的名字 -e
示例: express demo -e
备注:
项目文件夹的名字: 会自动生成一个项目文件夹
-e: 使用 ejs 模板
3) 进入项目目录, 运行 cnpm i, 一次性安装所有的依赖模块
cd demo
cnpm i
4) 启动项目
a) 方式一: (不推荐)
npm run start (start有点特殊 可以缩写 npm start)
备注: npm run 可以运行 package.json 里面 script里面的内容
b) 方式二 (*****推荐)
i) 打开 app.js 文件 , 在文件尾部(在暴露出去之前),可以自己监听端口
app.listen(端口号, () => {
console.log('服务器启动成功...')
})
ii) 启动项目
node app
补充: 因为每次都要动服务器代码, 都需要重启服务器,很烦
可以全局安装一个模板 nodemon
1) 全局安装 nodemon
cnpm i nodemon -g
2) 使用nodemon 替代 node 启动项目
原来: node app
现在: nodemon app
- 项目目录详解:
bin: 启动目录 里面包含了一个启动文件 www 默认监听端口是 3000 (不用)
node_modules: 所有安装的依赖模块 都在这个文件夹里面
public: 所有的前端静态资源 html css image js
routes: 放的是 路由 文件 (默认有两个)
路由主要定义 url 和 资源 的映射关系 ( 一一对应关系 )
主要用来接收前端发送的请求 响应数据给前端
views: 主要放置 ejs 后端模板文件
app.js: 入口文件(主文件) 总路由 (其他的路由 要由它来分配)
package.json: 包描述文件 最重要的是 依赖的模板列表 dependencies
依赖列表里面的所有模板 可以通过 cnpm i 一次性全部安装
- 路由分配:
1) 在routes下面 新建一个子路由文件
vip.js
2) 在主路由文件 app.js里面 改动 两处
a) 在第8行左右 引入路由
var vipRouter = require('./routes/vip');
b) 在25行左右 分配路由 /vip 下面的请求 都交给vip路由处理
app.use('/vip', vipRouter);
3) 以上步骤完成, 就可以在vip.js 这个路由里面 接收前端发送的 /vip下面的请求
- res响应对象(*****)
res主要负责 后端向前端 响应(发送)数据(如果接收了请求 不响应,会一直挂起(转圈圈))
主要方法:
1) res.send() (*****) // 万能方法 可以响应JSON 字符串 HTML script
2) res.json() // 主要给前端响应 JSON 数据
3) res.jsonp() // 主要给前端响应 JSON 数据(针对跨域请求)
4) 数据和模板在后端合并渲染 生成HTML 返回给前端
res.render('ejs模板文件', {JSON对象格式的数据})
5) res.download('要下载的文件的路径', '标题')
6) res.redirect("要跳转到的新的网址url")
7) res.status(状态码404).render("ejs模板名字", {JSON对象格式的数据})
- req请求对象(*****)
req主要负责 接收前端发送过来的数据(参数)
主要方法:
a) 接收 get 方式的请求的参数
req.query.参数的key值
b) 接收 post 方式的请求的参数
req.body.参数的key值
c) 补充:
req.ip 获取浏览器的ip地址