最近才看了vue2.0 高仿音乐webapp 的教学视频,但是因为vue-cli(vue-cli 的版本是2.8.2) 的版本不同,自己的 /build 目录下并没有 dev-server.js 这个文件。而视频上是在这个文件里面通过调用nodejs 的接口发送请求跨域获取数据的。请问现在我用的这个版本的vue-cli 有什么方法可以替代
最近才看了vue2.0 高仿音乐webapp 的教学视频,但是因为vue-cli(vue-cli 的版本是2.8.2) 的版本不同,自己的 /build 目录下并没有 dev-server.js 这个文件。而视频上是在这个文件里面通过调用nodejs 的接口发送请求跨域获取数据的。请问现在我用的这个版本的vue-cli 有什么方法可以替代
/*
var express = require('express')
var axios = require('axios')
var app = express()
var apiRoutes = express.Router()
app.use('/api', apiRoutes)
*/
// proxy api requests
// 配置中间代理插件 其实就是获取 /config/index.js 下面的proxyTable 的键值
var axios = require('axios')
var proxyTable = config.dev.proxyTable;
Object.keys(proxyTable).forEach(function (context) {
var options = proxyTable[context]
if (typeof options === 'string') {
options = { target: options }
}
app.use(proxy(options.filter || context, options))
})
devServer: {
clientLogLevel: 'warning',
historyApiFallback: true,
hot: true,
host: process.env.HOST || config.dev.host,
port: process.env.PORT || config.dev.port,
open: config.dev.autoOpenBrowser,
overlay: config.dev.errorOverlay ? {
warnings: false,
errors: true,
} : false,
publicPath: config.dev.assetsPublicPath,
proxy: config.dev.proxyTable,
quiet: true, // necessary for FriendlyErrorsPlugin
watchOptions: {
poll: config.dev.poll,
},
after(app) {
app.get('/lyric', function (req, res) {
var url = 'https://c.y.qq.com/lyric/fcgi-bin/fcg_query_lyric_new.fcg'
axios.get(url, {
headers: {
referer: 'https://c.y.qq.com/',
host: 'c.y.qq.com'
},
params: req.query
}).then((response) => {
var ret = response.data
if (typeof ret === 'string') {
var reg = /^\w+\(({[^()]+})\)$/
var matches = ret.match(reg)
if (matches) {
ret = JSON.parse(matches[1])
}
}
res.json(ret)
}).catch((e) => {
console.log(e)
})
})
}
},
//首先
const express = require('express')
var axios = require('axios')
const app = express()
var apiRoutes = express.Router()
app.use('/api', apiRoutes)
devServer: {
clientLogLevel: 'warning',
historyApiFallback: true,
hot: true,
host: process.env.HOST || config.dev.host,
port: process.env.PORT || config.dev.port,
open: config.dev.autoOpenBrowser,
overlay: config.dev.errorOverlay ? {
warnings: false,
errors: true,
} : false,
publicPath: config.dev.assetsPublicPath,
proxy: config.dev.proxyTable,
quiet: true, // necessary for FriendlyErrorsPlugin
watchOptions: {
poll: config.dev.poll,
},
after(app) {
app.get('/api/lyric', (req, res) => {
var url = 'https://c.y.qq.com/lyric/fcgi-bin/fcg_query_lyric_new.fcg'
axios.get(url, {
headers: {
referer: 'https://c.y.qq.com',
host: 'c.y.qq.com'
},
params: req.query
}).then((response) => {
var ret = response.data
if (typeof ret === 'string') {
var reg = /^\w+\(({[^()]+})\)$/
var matches = ret.match(reg)
if (matches) {
ret = JSON.parse(matches[1])
}
}
res.json(ret)
}).catch((e) => {
console.log(e)
})
})
}
},
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答4.7k 阅读✓ 已解决
4 回答4.3k 阅读✓ 已解决
4 回答2.4k 阅读✓ 已解决
4 回答1.9k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
折腾了一天 终于搞好了,问题可能描述得不太清楚,我这里再说一遍。
如果你也看过这个视频教程,你就会知道,老师所用的方法是在 build/dev-server.js 里面开一个 express 服务器,然后它会监听到页面发送的请求,如果请求地址与这里代理的地址一样就会跳进这个代理,代码如下:
上面是vue-cli webpack 模板 1.2.4 之前的配置方法(版本可能更前)
但是以目前最新版本的vue-cli webpack 模板来说有这样的变化:
1、没有了dev-server.js 和 dev-client.js
2、package.js 里面并没有 express 和 http-proxy-middleware,我在配置的时候一直没有留意,所以一直搞到下午才算完成。
配置之前需要npm 安装 express 至于 http-proxy-middleware 视情况安装吧,不过还是有用的
然后,就像以往一样 require 一个 express
最后,代码需要这样写
在 devServer 里面增加一个 after方法(before 方法我没试过):
参数调用 get 方法
然后就好像老师所说的那样写进去就好了
以后通过 express服务器 作为中转也可以这样做
// --------------- 跟新于2018-01-03 ---------------------
真的很抱歉,最近的一个月都在忙着准备面试,找工作的事情没怎么留意上面的回复了 这里贴一下源码