溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

express搭建純后臺,前臺使用vue-cli腳手架

發(fā)布時間:2020-06-20 07:01:06 來源:網(wǎng)絡 閱讀:746 作者:xxxpjgl 欄目:web開發(fā)

注意:后臺服務更改之后需要重啟服務;前端配置文件更改之后也需要重新跑命令npm run dev
一、使用express提供后臺服務,輸出接口
后臺目錄結(jié)構(gòu):
express搭建純后臺,前臺使用vue-cli腳手架

main.js

var express = require('express');
var app = express();
app.get('/', function (req, res) {
    res.send('Hello World');
})
app.get('/getUserInfo', function(req, res, next){  //用于前臺調(diào)用的接口,地址:http://127.0.0.1:8888/getUserInfo
    console.log('get用戶請求數(shù)據(jù)為:');
    console.log(req.query);
    res.json({
        code:200,
        data:{
            message:'你好'
        },
        message:'success'
    });
});
var server = app.listen(8888, function () {
    var host = server.address().address
    var port = server.address().port
    console.log(host,port)
    console.log("your application is running on http://localhost:8888")
})

---解釋---:

(1)、app.get()表示接收所有前端來的get請求方式,同理,app.post(),app.delete()分別表示接受前端發(fā)來的post請求與delete請求方式。

(2)、app.get(path, callback [, callback ...]):傳參,第一個參數(shù)是路徑,后面的參數(shù)都是是回調(diào)函數(shù),可以放1個或者多個回調(diào)函數(shù),一般只用到1個回調(diào),本例也只用了1個回調(diào)。官方對這個方法的解釋是:Routes HTTP GET requests to the specified path with the specified callback functions,意即‘用指定回調(diào)方法向指定路徑發(fā)送http get請求’,通俗講就是對path參數(shù)表示的接口執(zhí)行一些操作,這些操作寫在第二個參數(shù)即回調(diào)函數(shù)內(nèi)。

(3) app.get()中的第二個參數(shù)---回調(diào)函數(shù):該回調(diào)函數(shù)接受3個參數(shù),按照大多數(shù)人的不成文的書寫慣例,這三個傳參寫作req, res, next。第一個參數(shù)表示http請求對象(request),第二個參數(shù)表示response對象,第三個參數(shù)是next函數(shù),表示將控制權(quán)交給下一個中間件。next有點復雜不詳說,只要記住一個請求結(jié)束后,不要后面寫next(),常見的res.send(),res.json()都屬于請求結(jié)束,后面不要再寫next()了.

(4)res.json(obj) 表示返回一個json對象,該對象的詳細數(shù)據(jù)就是括號里的東西啦。

二、前端使用vue-cli腳手架
前端目錄結(jié)構(gòu):
express搭建純后臺,前臺使用vue-cli腳手架
1、先解決跨域問題
在config/index.js文件里面的module.exports對象里面的proxyTable里面加上以下代理:

proxyTable: {
    '/gsafetyapi': {
        target: 'http://127.0.0.1:8888/', //要代理的服務地址,要加http
        changeOrigin: true,  //是否跨域
        secure: false, //如果是https接口,需要配置這個參數(shù)
        timeout: 480000,
        pathRewrite: {
            '^/gsafetyapi': ''  //這里理解成用gsafetyapi代替target里面的地址
        }
    },
},

2、封裝axios和接口地址集合
新建文件夾plugins
express搭建純后臺,前臺使用vue-cli腳手架
http.js

import axios from 'axios';
import apiConfig from "./api.js"
import qs from 'qs'

axios.defaults.baseURL = process.env.NODE_ENV === 'development' ? 'gsafetyapi' : '';  //開發(fā)的時候加代理,生產(chǎn)環(huán)境不用加代理
// 請求攔截
axios.interceptors.request.use(config => {
  // 1. 這個位置就請求前最后的配置
  // 2. 當然你也可以在這個位置 加入你的后端需要的用戶授權(quán)信息
  return config
}, error => {
  return Promise.reject(error)
})
// 響應攔截
axios.interceptors.response.use(response => {
  // 請求成功
  // 1. 根據(jù)自己項目需求定制自己的攔截
  // 2. 然后返回數(shù)據(jù)
  return response;
}, error => {
  // 請求失敗
  if (error && error.response) {
    switch (error.response.status) {
      case 400:
        // 對400錯誤您的處理\
        break
      case 401:
        // 對 401 錯誤進行處理
        break
      default:
        // 如果以上都不是的處理
        return Promise.reject(error);
    }
  }
})
export default {
  /**
   * get 請求
   * @param api_name 接口路由
   * @param params 接口參數(shù)
   * @param time 如果請求話費了超過 `time` 的時間,請求將被中斷
   * @returns {AxiosPromise<any>}
   */
  // get(apiKey, data) {
  //   return axios.get(apiConfig[apiKey], data);
  // },
  get(api_name, params, time) {
    let url = apiConfig[api_name];
    return axios({
      method: 'get',
      url: url,
      params: params,
      timeout: time || 60000,
    })
  },
  /**
   * post 請求
   *
   * @param api_name 接口路由
   * @param params 接口參數(shù)
   * @param time 如果請求話費了超過 `time` 的時間,請求將被中斷
   * @returns {AxiosPromise<any>}
   */
  post(api_name, params, time) {

    let url = apiConfig[api_name];
    return axios({
      method: 'post',
      url: url,
      params: qs.stringify(params),
      timeout: time || 60000,
    })
  },
}

封裝api的文件
api.js

export default {
  getCompanyDepartmentTree: "/api/v1/user-center-service/companyDepartment/getCompanyDepartmentTree", //獲取組織架構(gòu)數(shù)據(jù)
  getUserInfo:"/getUserInfo"
}

3、全局注冊封裝好的axios

// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
// 已在webpack.base.conf中使用別名設置了要使用import命令加載的Vue構(gòu)建版本(僅運行時或獨立運行)
import Vue from 'vue'
import App from './App'
import router from './router'
import http from '../plugins/http'
Vue.config.productionTip = false
Vue.prototype.$http = http;

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  components: { App },
  template: '<App/>'
})

4、調(diào)接口:http://127.0.0.1:8888/getUserInfo

created () {
    this.$http
        .get("getUserInfo",{name:'kate'}).then(res => {
            console.log(res)
        });
  }

三、數(shù)據(jù)庫使用mongodb
1、安裝,直接安裝在c盤下
2、配置環(huán)境變量
3、創(chuàng)建數(shù)據(jù)庫文件的存放位置
在D盤下新建mongodb文件夾,
mongodb文件夾里面新建data文件夾,data文件夾里面新建db和log文件夾
mongodb文件夾里面新建mongo.config配置文件,文件內(nèi)容:

##數(shù)據(jù)文件  此處=后對應到數(shù)據(jù)所存放的目錄
dbpath=d:\mongodb\data\db
##日志文件  此處=后對應到日志文件所在路徑
logpath=d:\mongodb\data\log\mongodb.log
##錯誤日志采用追加模式,配置這個選項后mongodb的日志會追加到現(xiàn)有的日志文件,而不是從新創(chuàng)建一個新文件
logappend=true 
#啟用日志文件,默認啟用
journal=true 
#這個選項可以過濾掉一些無用的日志信息,若需要調(diào)試使用請設置為false
quiet=true 
#端口號 默認為27017
port=27017

4、
net start MongoDB 開啟服務
net stop MongoDB 關(guān)閉服務
5、現(xiàn)在搭建的是本地數(shù)據(jù)庫,數(shù)據(jù)庫地址:http://localhost:27017/

6、mongoose 數(shù)據(jù)模型
直接用 node.js 也可以連接數(shù)據(jù)庫進行讀寫,但mongoose 這個插件除了封裝這個基本功能之外,還提供了很多其他的服務。

安裝:npm install mongoose --save
var mongoose = require('mongoose');
//鏈接數(shù)據(jù)庫
mongoose.connect('mongodb://localhost:27017/db',function(err){
    if(err){
        console.log('數(shù)據(jù)庫連接失敗')
    }else{
        console.log('數(shù)據(jù)庫連接成功')
        var server = app.listen(8888, function(){
            console.log("Server is running on http://localhost:8888");
        });
    }
});

7、建立schema,類似于一個collection集合的概念,類似于mysql的一張表,定義schema,就是定義這張表的表結(jié)構(gòu),要存什么格式的數(shù)據(jù),每一條數(shù)據(jù)都是這張表的一行,
注意:這種schema不具備操作數(shù)據(jù)庫的能力

let mongoose = require('mongoose');
let userScheam = new mongoose.Schema({
    //賬戶名
    account:String,
    pass:String,
    checkPass:String,
    age:Number
})
module.exports = userScheam;

8、定義好了Schema,接下就是生成Model。
model是由schema生成的模型,可以對數(shù)據(jù)庫進行操作

//表有了,下面需要借助model,來對數(shù)據(jù)庫的表進行操作
let mongoose = require('mongoose');
let userSchema = require('../schemas/userSchema');
module.exports = new mongoose.model('User',userSchema); //User是給這個模型起的名字,后面是要操作的那個表的表名
//User才具有了對表進行增刪改查的api

9、在路由文件前面,引入該model,然后就可以使用
var User = require('./models/userModel');
User.save(); User.find();等等增刪改查方法

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI