Node plus express plus http-proxy-middleware proxy forwarding is used to solve cross-domain problem and data acquisition fails.

  node.js, question

For example, using express plus http-proxy-middleware proxy cannot get the data.

This isapp.jsThe content of

var express = require('express');
 var path = require('path');
 var favicon = require('serve-favicon');
 var logger = require('morgan');
 var cookieParser = require('cookie-parser');
 var bodyParser = require('body-parser');
 //proxy plug-in
 var proxy = require('http-proxy-middleware');
 //Cross Domain Plug-in
 var cors = require('cors');
 
 var index = require('./routes/index');
 var users = require('./routes/users');
 
 var app = express();
 app.use(cors());
 
 // view engine setup
 app.set('views', path.join(__dirname, 'views'));
 app.set('view engine', 'jade');
 
 // uncomment after placing your favicon in /public
 // app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
 app.use(logger('dev'));
 app.use(bodyParser.json());
 app.use(bodyParser.urlencoded({
 extended: false
 }));
 app.use(cookieParser());
 app.use(express.static(path.join(__dirname, 'public')));
 
 app.use('/', index);
 app.use('/users', users);
 
 
 // catch 404 and forward to error handler
 app.use(function(req, res, next) {
 var err = new Error('Not Found');
 err.status = 404;
 next(err);
 });
 
 // error handler
 app.use(function(err, req, res, next) {
 // set locals, only providing error in development
 res.locals.message = err.message;
 res.locals.error = req
 .app
 .get('env') === 'development' ?
 err : {};
 
 // render the error page
 res.status(err.status || 500);
 res.render('error');
 });
 
 //Set up proxy
 app.use('/api', proxy({
 target: 'https://api.douban.com',
 changeOrigin: true
 }));
 app.listen(4000, function() {
 console.log('http://localhost:4000')
 });
 
 
 module.exports = app;

I grabbed the api of Douban Music, and then the code of the client is as follows

function ajax(url) {
            var xml = new XMLHttpRequest();

            xml.open('GET', url, true);

            xml.onreadystatechange = function() {
                if (xml.readyState == 4 && xml.status == 200) {
                    console.log(JSON.parse(xml.responseText));
                }
            }

            xml.send();
        }

        ajax('http://localhost:4000/v2/music/search?q=周杰伦')

However, when reporting an error, no data can be obtained. Cross-domain data are indeed missing, but no data can be obtained.
图片描述

Api interface address isDouban music api, can be opened normally. I don’t know if I wrote something wrong, bosses help me look at it. Thank you very much.

Api path is not defined correctly, read ithttp-proxy-middlewareDocument for

var express = require('express');
 //proxy plug-in
 var proxy = require('http-proxy-middleware');
 
 var app = express();
 
 //Set up proxy
 app.use('/v2', proxy({
 target:  'https://api.douban.com/' ,
 changeOrigin: true
 }));
 app.listen(4000, function() {
 console.log('http://localhost:4000')
 });