1、环境准备
node环境
查看当前node版本命令
node -v ; node – version
npm
nodejs下的包管理工具
查看当前npm版本命令
npm -v ; npm – version
node 与 npm 的版本最好具有依附性,如果node环境下不能运行npm命令 可能也存在版本不适问题;
2、初始化项目
npm init; --具有可选项
npm init -y;–都设置为默认选项
随之会在项目目录下生成一个package.json文件
3、创建文件夹
这一步主要是为了去创建
public (一般存放静态资源)、
routes (用来拦截路由)、
controller (处理拦截相对应路由的回调) 、
config (node配置数据库等configjs文件)、
views (视图)、
utils (存放工具文件及路由拦截的api)
等文件夹
4、创建app.js配置文件
首先在项目的根目录下创建app.js文件
如果想要搭建并运行我们自己的服务器,
一般会在这个文件里进行以下配置,
4.1、搭建express框架
安装:npm install express --save (项目依赖)
我这里安装的是4.17.1版本,
当然你也可以安装时使用npm i express@版本号 --save,来指定安装版本(i就是install的缩写)
4.1.1、最基础的服务器代码
**1、在app.js中引入express模块**
const express = require("express")
**2、创建服务器对象**
const myapp = express()
**3、配置服务器监听端口**
myapp.listen(8080,function(){
console.log(`服务器已启动...\nhttp://localhost:8080`)
})
通过node app来启动服务器;
这时我们的服务器是可以正常启动了,监听端口为8080;
4.1.2 安装依赖模块
morgan --用于监听日志文件
body-parser --用于解析post请求,但是express版本4以上已经内置了此模块
serve-favicon --配置网页小图标
express-session --配置会话
multer --配置文件上传
链式安装以上模块: npm i morgan body-parser serve-favicon express-session multer --save
4.1.3 配置静态资源路径
配置时使用字符串拼接路径或者
使用nodejs内置的path模块的join拼接
// **1、引入express模块**
const express = require("express")
const morgan = require("morgan")
const favicon = require("serve-favicon")
const bodyParser = require("body-parser")
const path = require("path") //nodejs中内置的模块
// **2、创建服务器对象**
const myapp = express()
**配置静态资源目录**
// myapp.use(express.static(__dirname+"/public"))
myapp.use(express.static(path.join(__dirname,"public")))
**配置网页图标**
// myapp.use(favicon(__dirname+"/public/image/logo.png"))
myapp.use(favicon(path.join(__dirname,"public","image","logo.png")))
// **3、配置服务器监听端口**
myapp.listen(8080,function(){
console.log(`服务器已启动...\nhttp://localhost:8080`)
})
4.2、拦截路由,配置路由
首先我们考虑到post请求需要配置解析post请求数据
利用express内置的body-parser或body-parser模块
4.3、前端发起请求后,出现跨域的问题
将以下代码放置在app.js中
// 解决同源策略
myapp.all('*', function (req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
res.header("X-Powered-By", ' 3.2.1')
res.header("Content-Type", "application/json;charset=utf-8");
next();
});
// 拦截请求
myapp.post("/api/user/login", (req, res) => {
console.log("拦截请求成功")
console.log(req.body)
res.send("返回数据成功")
})
这样其实我们就可以进行数据库连接然后查询数据通过res.send或res.json返回相应的数据;
但是为了使我们的代码更加优雅 可读性更强,我们通过routes文件夹来分路由拦截,提高了执行效率,及模块化思想编程;
所以我们接下来将其进行拆分
路由拦截拆分
在静态资源后配置路由模块
路由文件
此时依旧可以成功拦截请求,并返回数据
但是处理函数的代码还是不够优雅,因为其相当于是路由拦截后执行的控制操作
所以我们可以将其写入到contorller文件的js文件中去;
控制操作拆分
将处理函数进行拆分到contorller文件
这样所有的处理函数都在一起方便管理
同样的道理 路由拦截api我们也可以将其分离出来
5、node连接数据库
当我们完成以上操作时,我们已经成功的将前端发送过来的数据接收到,并且就绪;
现在我们需要连接数据库,通过数据库来查询出相应的数据,并给前端返回;
5.1、配置数据库相关操作
安装: npm i mysql --save (开发依赖)
安装成功我们在config文件夹下创建一个dbconfig.js文件(数据库配置文件)
const mysql = require("mysql") //引入mysql模块
module.exports = {
dbConnect:function(sql,params,callback){
// 建立连接
let connect = mysql.createConnection({
host:"localhost",
port:3306,
user:"root",
password:"123",
database:"$_doctor",
multipleStatements:true, //支持执行多条 sql 语句
timezone:"8:00" //设置时区,如果不匹配,就可能有时差
})
// 打开连接
connect.connect()
// 通过sql查询数据库
connect.query(sql,params,callback)
// 关闭连接
connect.end()
}
}
5.2、配置成功后在路由拦截处理函数sql查询及数据的返回
const db = require("../config/dbconfig")
module.exports = {
login(req, res) {
console.log("body拦截请求成功")
console.log(req.body)
let {uname,upwd} = req.body //解构赋值
let sql = `select * from user_info where uname = ? and upwd = ?;`
let params = [uname, upwd]
db.dbConnect(sql, params, (err, data) => {
console.log(data)
if (!err && data.length == 1) {
res.json({
code: 0,
data: data
})
} else {
res.json({
code: 4001,
data: data
})
}
})
}
}
从数据库请求数据再返回给前端;
6、添加其他路由拦截时
在拦截其他路由时进行
routes路由的拦截
app中的路由的使用
api中拦截地址配置
contorller拦截处理函数的配置
完成以上几点就可以了;