从不同端口的 Vue 应用程序 运行 调用节点快速服务器 API
Calling node express server API from Vue application running in a different port
我最近开始学习 vue.js,目前使用 vue.js 和 vue-simple-webpack 模板、express 和 mongo 来开发一个简单的应用程序。我正在使用本地主机来开发和测试应用程序。
应用程序 front-end 在端口 8080 中运行,服务器 运行 在不同的端口 (3000)
这是我的 server.js
,我有一个简单的 api 从我的 localdb
获取数据
const express = require('express');
const MongoClient = require('mongodb').MongoClient;
const mongodb = require('mongodb');
const bodyParser= require('body-parser');
const app = express();
var db;
var URL='mongodb://localhost:27017/'+'mydb';
console.log(URL);
app.use(express.static(__dirname + '/public'));
app.use(bodyParser.urlencoded({extended: true}))
app.use(bodyParser.json())
MongoClient.connect(URL, (err, database) => {
if (err)
return console.log(err);
db = database;
app.listen(3000, () => {
console.log('listening on 3000');
})
})
app.get('/products', (req, res) => {
db.collection('products').find().toArray(function(err, results) {
console.log(results)
res.setHeader('Content-Type', 'application/json');
res.send(JSON.stringify(results));
})
})
测试了 server.js,它有效。请参阅下面的屏幕截图。
Vue 应用程序 运行 in http://localhost:8080/
使用 webpack 模板的默认配置。我正在尝试使用 $http get 从 vue.js 文件调用 /products
api 端,如下所示...
export default {
name: 'Products',
methods: {
get: function() {
// GET request
this.$http({
url: '/products',
method: 'GET'
}).then(function(response) {
console.log('ok');
}, function(response) {
console.log('failed');
});
}
}
}
但是我在浏览器控制台中收到以下错误。
如您所见,即使我在 server.js
中使用端口 3000
,当我尝试访问 /products
api 端时,它实际上会通过端口 8080
。因此它抛出 404 http 错误。
我的问题是如何从在不同端口运行的 front-end 访问 API 端。那有可能吗?
我可以在这里使用 API Proxying 吗?如果是这样,有人能给我指出正确的操作方法吗,因为网上没有太多可用的信息。
您可以使用webpack提供的代理配置。
文档:https://webpack.js.org/configuration/dev-server/#devserver-proxy
代码段配置:
proxy: {
"/products": "http://localhost:3000/products"
}
更好的做法是将 /api/* 请求转发到 http://host:port/api/* 网址。
我最近开始学习 vue.js,目前使用 vue.js 和 vue-simple-webpack 模板、express 和 mongo 来开发一个简单的应用程序。我正在使用本地主机来开发和测试应用程序。
应用程序 front-end 在端口 8080 中运行,服务器 运行 在不同的端口 (3000)
这是我的 server.js
,我有一个简单的 api 从我的 localdb
const express = require('express');
const MongoClient = require('mongodb').MongoClient;
const mongodb = require('mongodb');
const bodyParser= require('body-parser');
const app = express();
var db;
var URL='mongodb://localhost:27017/'+'mydb';
console.log(URL);
app.use(express.static(__dirname + '/public'));
app.use(bodyParser.urlencoded({extended: true}))
app.use(bodyParser.json())
MongoClient.connect(URL, (err, database) => {
if (err)
return console.log(err);
db = database;
app.listen(3000, () => {
console.log('listening on 3000');
})
})
app.get('/products', (req, res) => {
db.collection('products').find().toArray(function(err, results) {
console.log(results)
res.setHeader('Content-Type', 'application/json');
res.send(JSON.stringify(results));
})
})
测试了 server.js,它有效。请参阅下面的屏幕截图。
Vue 应用程序 运行 in http://localhost:8080/
使用 webpack 模板的默认配置。我正在尝试使用 $http get 从 vue.js 文件调用 /products
api 端,如下所示...
export default {
name: 'Products',
methods: {
get: function() {
// GET request
this.$http({
url: '/products',
method: 'GET'
}).then(function(response) {
console.log('ok');
}, function(response) {
console.log('failed');
});
}
}
}
但是我在浏览器控制台中收到以下错误。
如您所见,即使我在 server.js
中使用端口 3000
,当我尝试访问 /products
api 端时,它实际上会通过端口 8080
。因此它抛出 404 http 错误。
我的问题是如何从在不同端口运行的 front-end 访问 API 端。那有可能吗?
我可以在这里使用 API Proxying 吗?如果是这样,有人能给我指出正确的操作方法吗,因为网上没有太多可用的信息。
您可以使用webpack提供的代理配置。
文档:https://webpack.js.org/configuration/dev-server/#devserver-proxy
代码段配置:
proxy: {
"/products": "http://localhost:3000/products"
}
更好的做法是将 /api/* 请求转发到 http://host:port/api/* 网址。