1.首先搭建vue我的项目

npm install -g @vue/cli

2.新建一个文件夹http_serve ,我的目录构造

1)index.js文件

const express = require('express')const app = express()const apiRouter = require('./router') //接口  数据申请的解决app.use(apiRouter)require('./db') // app.get('*', function(req, res) { //     res.send('aaa') // })// app.use((req, res, next) => {//     console.log('==', req.url, req.method);//     next();// })//容许跨域拜访  发现写不写都可,因为我配置了代理app.all('*', function(req, res, next) { console.log('容许跨域') res.header("Access-Control-Allow-Origin", "*"); res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS'); res.header("Access-Control-Allow-Headers", "X-Requested-With"); res.header('Access-Control-Allow-Headers', 'Content-Type'); next();});const { log} = require('console')app.listen(process.env.PORT || 8080, function() { console.log("Listen port:8080...")});

2) db.js 连贯mongodb

let mongoose = require('mongoose');var User = require('../serve_scheam/user')    //  * 连贯mongoose.connect('mongodb://localhost/News', {    useNewUrlParser: true});//   * 连贯胜利mongoose.connection.on('connected', function() {    console.log('Mongoose connection succuss');});//  * 连贯异样mongoose.connection.on('error', function(err) {    console.log('Mongoose connection error: ' + err);});//  * 连贯断开mongoose.connection.on('disconnected', function() {    console.log('Mongoose connection disconnected');});module.exports = mongoose;

3) router.js 具体每个接口须要做什么操作(增删改查)

// 解决数据库中的各个汇合的表const express = require('express')const app = express()const bodyParser = require('body-parser')// const app = require('express').express()var News = require('../serve_scheam/newsList')var User = require('../serve_scheam/user')app.use(bodyParser.urlencoded({    extended: true //如果为false的话  就容易呈现 body: [Object: null prototype] {.. },}));app.use(bodyParser.json()) //解析json类型的申请体var resultObj = {    code: 200,    data: 'success'}console.log('======================> 开始解决路由router');app.get('/User/getList', (req, res) => {    console.log('========>', req)        // res.send('66666')        // 查找数据库    User.find((err, data) => {        if (err) {            res.send(err);        } else {            res.send(data);        }    });})app.post('/News/addNews', (req, res) => {    console.log('post====>', req);    let news = new News({        title: req.body.title ? req.body.title : '未知题目',        content: req.body.content ? req.body.content : '未知内容',        author: req.body.author ? req.body.author : '佚名'    });    news.save((err, data) => {        if (err) {            res.send(err);        } else {            res.send(resultObj);        }    });})module.exports = app;

5) 接下来是serve_scheam文件夹下
newlist文件

const mongooes = require('../serve_setting/db')require('../serve_setting/db');var monSchema = require('mongoose')var Schema = monSchema.Schema;var newsSchema = new Schema({    title: String,    content: String,    author: String})module.exports = monSchema.model('News', newsSchema)

user文件

// goods.js// var mongoose = require('mongoose');var mongoose = require('../serve_setting/db');var monSchema = require('mongoose')var Schema = monSchema.Schema;// 定义一个Schemavar userSchema = new Schema({    'userName': String, // 或者 'productId':{type:String}    'passWord': String})// 输入(导出)module.exports = monSchema.model('User', userSchema); // 定义一个good商品模型,能够依据这个商品模型调用其API办法。// 这个模型定义的是数据库dumall的goods汇合数据,所以这个model取名good是对应这个汇合,连贯数据库之后,这个模型会依据名字的复数模式"goods"来查找数据汇合。// module.exports = mongoose.model('good',produtSchema,'goods'); 也能够前面注明链接的是数据库的goods汇合

下面就是咱们服务端的,如果想启动node服务,我是在package.json文件中增加
"index": "node http_serve/serve_setting/index.js"
npm run index 即可开启

上面是vue 页面,首先对axios的二次封装 , 为了不便保护接口的对立解决, 以及代理跨域(因为vue 开启的服务端口号是8081 ,而node开启的是8080,所以我就在本地代理了)

3.新建http文件夹 ,httpConfig文件

import axios from 'axios'import qs from 'qs'// import router from '../router'/** * 封装axios的通用申请 * @param  {string}   method     get\post\put\delete * @param  {string}   url       申请的接口URL * @param  {object}   param     传的参数,没有则传空对象 */// let access_token = localStorage.getItem('access_token') ? localStorage.getItem('access_token') : 'sdsdsdsdsdsd'axios.interceptors.request.use(config => {    return config}, error => {    return Promise.reject(error)})axios.interceptors.response.use(response => {    return response}, error => {    return Promise.resolve(error.response)})function http(url, param, Methods) {    console.log(url, param, Methods);    let method    if (Methods) {        method = Methods    } else {        method = 'post'    }    param = param && typeof param === 'object' ? param : {}    const config = {        url: url,        method: method,        transformRequest: [function(param) {            return qs.stringify(param)        }],        headers: {            'X-Requested-With': 'XMLHttpRequest'        }    }    // console.log("http__param==",param);    // post申请时须要设定Content-Type    if (method === 'post') {        config.headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8';        config.data = param    } else if (method === 'get') {        config.params = param    }    return axios(config)}// export {//     http// }export default http

2) 在apiSetting文件中

import http from './httpConfig'export default {   getUserList(data) {       return http(           '/User/getList',           data,           'get',       )   },   addNews(data) {       return http(           '/News/addNews',           data,           'post',       )   }}

3) 跨域代理 在vue的根目录中新建一个vue.congfig.js文件夹

// vue.config.jslet baseUrl = 'http://localhost:8080/'console.log('====================================vue_config');module.exports = {    devServer: {        open: true, // 配置主动启动浏览器        disableHostCheck: true,        // 配置代理        proxy: {            "/User": {                target: 'http://localhost:8080/User', // 想要拜访接口域名                changeOrigin: true, // 开启跨域,在本地创立一个虚构服务,而后发送申请的数据,并同时接管申请的数据,这样服务端和服务端进行数据交互就不会有问题                pathRewrite: {                    "^/User": '', // 利用这个高空的值拼接上target外面的地址                },                emulateJSON: true            },            "/News": {                target: 'http://localhost:8080/News',                changeOrigin: true,                 pathRewrite: {                    "^/News": '',                },                emulateJSON: true            },        }    }}

4.页面申请的时候

<template>  <div>    getNewsList    <h1 @click="addNews">增加文章</h1>  </div></template><script>import listApi from '../http/apiSetting'export default {  data () {    return {      list: [],      params: {        num: 3      }    }  },  mounted () {    this.getList()  },  methods: {    getList () {      listApi.getUserList(this.params).then((res) => {        console.log(res.data);      }).catch((err) => {        console.log(err);      })    },    addNews () {      listApi.addNews({ title: '再别康桥', content: '轻轻是分离的笙箫;夏虫也为我缄默,缄默是今晚的康桥!', author: '徐志摩' }).then((res) => {        console.log(res.data);      }).catch((err) => {        console.log(err);      })    }  }}</script><style></style>

这样就完了
开启服务: npm run index
运行: npm run serve