搭建路由:
使用express框架即可搭建路由,express也是前端常用的框架但是别跟vue等框架混淆。
express搭建路由是这样的:
//先引入express模块
var express=require("express");
//然后调用一下express
var app=express()
//接下来就可以使用express搭建路由了
app.get("路径一般是‘/’或者‘/xxx’",function(req,res){
//req是我们的请求体
//如果我们要将单个html文件或者css以及ji文件放在路由上则要引入并使用fs模块去读取文件
var fs=require("fs")//引入fs模块
fs.readFile("要放入路由文件的路径", function (err, data) {
res.writeHead(200, { 'Content-Type': 'text/文件类型' });
res.end(data)
})
})
//然后接下来写路由的地址
app.listen('路由的端口号可以是3030', function () {
console.log("可以访问localhost:3030")
})
//这样我们就简单的使用express搭建起了自己的路由
像上边的app.get()不仅仅可以是get也可以是delete或者post。要不app.get就是只接受get请求。或者我们可以直接使用app.all()接受任何请求
连接mysql
node.js连接mysql是使用连接池去进行连接的,连接mysql的前提是你的电脑上装了mysql。
node.js连接数据库是使用连接池去进行连接的像下面这样:
//先引入mysql
var mysql=require("mysql")
//然后调用mysql的createConnection函数
var link=mysql.createConnection({
host: 'localhost',
user: "用户名",//如果是在本地连接写root就行
password: "密码",//用户密码
database: "库名"//要连接的数据库的名字
})
//这个createConnection函数会返回一个对象我们需要去调用一下这个对象里的connect函数
link.connect()
//如果这个link.connect()成功了那么就证明我们连接成功了可以继续往下走如果连接不成功会直接报错
这样我们连接的数据库就连接成功了
我们一般把连接数据库和搭建路由结合使用来创建我们自己的接口,用来获取数据渲染页面。
例://先引入express模块
var express=require("rexpress");
//再引入mysql模块
var mysql=require("mysql");
//进行连接mysql的配置
var link=mysql.createConnection({
host: 'localhost',
user: "用户名",//如果是在本地连接写root就行
password: "密码",//用户密码
database: "库名"//要连接的数据库的名字
})
//进行连接
link.connect()
//调用express
var app=express()
app.get("路径为/xxx即可",function(req,res){
//写sql语句可以是增删改查的任意一个语句
var check="insert into 表名 set 字段名=值,字段名=值 where 限制条件"
//调用lianjie的query的函数用来执行sql语句//这个lianjie就是上边进行连接mysql的配置那的变量名
liajie.query(check//check就是要执行的sql语句,function(err,result){
//err就是错误信息如果在执行sql语句时有错就会报错,result就是执行sql语句后得到的结果
if(err){
console.log(err)
}else{
res.send(result)
res.end(err)
}
})
})
//进行端口号的设置
app.listen("端口号",function(){
console.log("端口号为:")
})
上述过程中个人踩坑记录:
-
跨域问题:
当我们在去用vue创建项目时,并且在vue的项目中使用了请求请求的还是这个接口就会遇到跨域问题。
一般运行vue的项目时,vue项目的端口号为8080如果8080被占用就会时8081,但是在去用node.js搭建路由写我们自己的接口时我们的端口号不能与vue项目的一致否则在运行vue的项目时就会出现问题。
但是端口号不一致,我们在vue的项目中去使用ajax或者axios去请求我们自己的接口时就会遇到跨域问题,我们可以这样在我们的接口中去进行请求头的设置来解决跨域,或者使用前端常用的跨域使用jsonp来解决跨域,设置请求头的方式解决跨域是像下边这样的
app.get("路径",function(req,res){ //上边说过req就是请求体 //通过设置请求头来解决跨域 res.header("Access-Control-Allow-Origin", "*");//这里的'*'号表示可以是域名跨域我们也可以不写‘*’号只写我们允许跨域的域名 res.header("Access-Control-Allow-Headers",d "content-type");//允许的请求头类型 res.header("Access-Control-Allow-Methods", "DELETE,PUT,POST,GET,OPTIONS");//允许的请求方式 })
-
接收不了请求问题
上边提过不仅仅只有app.get还有delete,post等。那么等我们去设置路由时,如果我们是这样写的
app.get("路径",function(req,res){}) //这种方式就只接受get请求 app.post("路径",function(req,res){}) //这种方式就只接受postt请求 app.delete("路径",function(req,res){}) //这种方式就只接受delete请求 app.all("路径",function(req,res){}) //这种方式就只接受任意类型的请求请求
-
找不到get请求的参数问题
我们在的get请求,从前端发过来的参数就在路由的req里,我们可以去使用。例:
app.all("路径",function(req,res){ console.log(req.query) //req.query就是我们get请求中传递过来的参数 })
- 找不到post请求传递的参数问题
找到post请求传递过来的参数有以下两种方式:
-
通过监听req的data事件来找到post参数。例
app.all("路径",function(req,res){ req.on("data",(p_t)=>{ //p_t就是传递过来的参数不过在因为在传递过程中是转化为二进制进行传递的而接受也是二进制形式,我们可以设置一个空的字符串与它拼接以下就能看到正常我们传递过来的参数 var p_s=""; var p_o+=p_t+p_s; console.log(p_o) }) })
-
通过req.body获取参数。例:
//使用req.body获取请求的参数时我们要在请求中先用qs模块转化以一下 //使用axios请求做例 //先引入qs模块和axios import axios from "axios" import qs from "qs" axios.post("请求路径", qs.stringify({ name:"tomy",//这里就是传递的数据 password:"123456"//这里就是传递的数据 })).then((a)=>{ console.log(a) }) //在接口方面 app.all("路径",function(req,res){ console.log(req.body) //req.body就是传递过来的数据 })