一、Express 项目搭建
请先安装node.js
安装Node.js-
搭建项目
-
创建文件夹
随便找一个地方,创建一个文件夹,取名为 service(名字请随意)。进入该文件终端,然后输入npm init
,初始化一个 node 项目,之后一直 enter 到结束。现在 service 文件夹里面就有一个package.json
文件了
image.png -
安装Express
命令行输入npm install express --save
,会自动生成一个node_modules
文件夹和package-lock.json
文件。
image.png -
搭建服务器
在service文件夹里面新建一个index.js
文件,并编辑:const express = require("express"); const app = express(); app.listen(5000, () => console.log('**********【服务器启动成功】**********'));
image.png -
启动服务器
在终端输入node index
回车,即可启动成功,并且会打印**********【服务器启动成功】**********
image.png
-
二、VUE项目构建
-
安装vue-cli3
请先全局安装vue-cli3
,进入终端,输入命令npm install -g @vue/cli
注意:如果以前安装过vue-cli的其他版本,请先卸载,详情请看npm更新vue-cli3,报错问题解决
-
vue页面构建
找一个文件夹,进入终端,输入vue create pro-name
,其中的pro-name
是你的项目名称,可以随意取名。然后就是依据提示,enter下去(新手可以直接使用默认的配置,配置过的朋友可以自己选择自己需要的进行配置),安装完成后用编辑器(我使用的是VS code)打开你的pro-name
项目,在终端里面运行npm install
,完成后npm run serve
,然后打开显示出来的网址,里面是 vue 构建的一些页面,这样 vue 单页面项目就构建成功了。
image.png
image.png
三、Vue 与 Express 连接
-
vue页面配置
在pro-name
文件夹里面新建一个vue.config.js
文件,编辑内容:const host = require('ip').address() module.exports = { devServer: { // 打开网址 open: true, host, port: 8080, }, }
image.png -
Node项目index.js(入口文件)配置
在index.js
里面写入get
、post
接口:app.get('/user/get', (req, res) => { console.log('req', req) console.log('res', res) res.send('get访问成功') }) app.post('/user/post', (req, res) => { console.log('req', req) console.log('res', res) res.send('post访问成功') })
image.png -
vue项目访问get、post
安装
axios
,在pro-name
文件夹终端输入npm install axios --save
-
引入和配置
axios
在src
文件夹下创建一个plugins
文件夹,再在plugins
文件夹下创建一个axios
文件夹,最后在axios
文件夹下创建一个index.js
文件,编辑内容:import Vue from 'vue' import axios from 'axios' const instance = axios.create({ // http://本机IP地址:端口号 baseURL: 'http://192.168.0.102:8000', // 请求时长 timeout: 15000, }) Vue.prototype.$instance = instance
image.png注意:本机IP地址:在终端输入
ifconfig
查询,端口号在你的node项目的index.js
文件里面
image.png
image.png接下来在
main.js
文件里面引入axios里面的index.js
文件:import './plugins/axios/index'
image.png -
选择一个页面访问
get
、post
,我选择的是Home.vue
页面,在script标签里面添加代码:// get接口 // 模板渲染成html前调用 created() { this.$instance .get('/user/get', { params: { name: 'name', }, }) .then(res => { console.log(res) }) .catch(error => { console.log('error: ', error) }) this.$instance .post('/user/post', { name: 'name', }) .then(res => { console.log(res) }) .catch(error => { console.log('error: ', error) }) },
image.png -
重新运行node:
node index
和 vue:npm run serce
可能你会得到一个报错的页面,这是跨域报错
image.png
解决办法,在node项目的index.js
文件里面添加:app.all('*', function (req, res, next) { //设置允许跨域的域名,*代表允许任意域名跨域 res.header('Access-Control-Allow-Origin', '*') //允许的header类型 res.header('Access-Control-Allow-Headers', 'content-type') //跨域允许的请求方式 res.header('Access-Control-Allow-Methods', 'DELETE,PUT,POST,GET,OPTIONS') if (req.method.toLowerCase() == 'options') res.send(200) //让options尝试请求快速结束 else next() })
image.png -
再次重新运行node:
node index
和 vue:npm run serce
得到这个结果,接口就算访问成功啦!
image.png