1.node.js+express搭建后台
新建一个index.js文件
var express = require('express');
var csdn = express();//这里的csdn可以换名字,一般脚手架里都是app命名
var router = express.Router();
router.post('/register',function(req,res){
//这里的post取决于前端页面的ajax请求方式,后面是自己定义了一个路径
})
csdn.use('/',router);//挂载到主路径上
csdn.listen(8000);//监听端口号8000
现在已经搭建好一个端口号为8000的本地服务了,supervisor index 启动服务 前端页面通过http://localhost:8000/register就可以走到搭建好的路由路径下
注意这里的localhost是主机ip,如果你是在别的电脑上访问这个服务,就需要改成自己的IP地址
2.链接数据库
链接数据库
var mongodb = require('mongodb').MongoClient;
var db_str="mongodb://localhost:27017/csdn";//链接数据库,最后这个csdn只是建立的一个数据库
var ObjectId = require("mongodb").ObjectId;//这里是为了方便下面通过id增删改查,进行转换
操作数据
router.post('/register',function(req,res){
mongodb.connect(db_str,(err,database)=>{ //链接数据库
database.collection('name',(err,coll)=>{ //链接集合,如果数据库里没有该集合则创建一个新的集合
coll.insert({name:'111'}); //插入一条数据,name:111
res.send('返回'); //这个是返回给前端的数据,可以在前端接收,这个返回的数据可以是通过查询数据库得到的,
})
})
})
/*类似这样
router.get('/user',(req,res)=>{
mongodb.connect(db_str,(err,database)=>{
database.collection('wxd',(err,coll)=>{
coll.find({}).toArray((err,data)=>{
res.send(data); //这个就是查询到的数据返回给前端
})
})
})
})
*/
然后前端页面写ajax交互就可以从与后台数据进行交互
//我这里用的是jquery的,需要引入jquery.js,如果是在脚手架里使用需要引入依赖 npm i jquery -D
$.ajax({
type:"post",
url:"http://localhost:8000/register",
success:function(data){
console.log(data) //这个data打印出来就是上面后端返回的数据——“返回”
}
})
3.跨域问题
一般前后端分离端口号都是不一样的,这就需要解决跨域问题
当你运行的时候会报这样一条错误
Access to XMLHttpRequest at 'http://localhost:8000/register' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
这里只需要在后端路径里加上一句res.header('Access-Control-Allow-Origin','*'),即可,配好了就是这样
router.post('/register',function(req,res){
res.header('Access-Control-Allow-Origin','*')
mongodb.connect(db_str,(err,database)=>{
database.collection('name',(err,coll)=>{
coll.insert({name:'111'});
res.send('返回');
})
})
})
4.post传参转换问题
写好之后,进行了实验,插入数据表没有问题,就开始传参数,用了get传参,后台req.query没有问题
然后用了post传参,后台用req.bod进行接收,但是无效。
在后台打印req.body,显示undefined,这是因为没有对数据表进行解析。
在index.js里配置如下代码。
var bodyParser = require('body-parser');
csdn.use(bodyParser.json());
csdn.use(bodyParser.urlencoded({ extended: true }));
5.将路径配置到不同文件
就像session一样,index,user分开,不会拥挤在一下。
而我们多人开发的时候,也希望大家各自操作自己的路径,也不会互相干扰。
但是启动服务始终都是我们最开始建立的文件,该怎么启动多个?
主要思路就是把其他文件暴露出来,主文件接收,这样启动就可以了。
现在新建一个indexs.js,按照上面将链接好数据库,路由,最后暴露出来,主要这里不在需要监听端口号;
在indexs.js末尾暴露 module.exports = router;然后在index.js里写入如下代码。
var indexsrouter= require('./indexs');//在index.js里进行接收
csdn.use('/indexs',indexsRouter);//挂载
router.post('/my',function(req,res){
//配置一个名为my的路径
})
然后在前端就可以进行请求,地址为http://localhost:3000/indexs/my
这里与最开始的多了indexs,是因为这里配置的就是indexs