我用nodejs,express和htt-proxy编写了一个小代理.它适用于提供本地文件,但在代理到外部api时失败:
var express = require('express'),
app = express.createServer(),
httpProxy = require('http-proxy');
app.use(express.bodyParser());
app.listen(process.env.PORT || 1235);
var proxy = new httpProxy.RoutingProxy();
app.get('/', function(req, res) {
res.sendfile(__dirname + '/index.html');
});
app.get('/js/*', function(req, res) {
res.sendfile(__dirname + req.url);
});
app.get('/css/*', function(req, res) {
res.sendfile(__dirname + req.url);
});
app.all('/*', function(req, res) {
req.url = 'v1/public/yql?q=show%20tables&format=json&callback=';
proxy.proxyRequest(req, res, {
host: 'query.yahooapis.com', //yahoo is just an example to verify its not the apis fault
port: 8080
});
});
Run Code Online (Sandbox Code Playgroud)
问题是雅虎api没有回复,也许有回应,但我没有在浏览器中出现.
我在nodejs上编写了简单的代理,它看起来像
var request = require( 'request' );
app.all( '/proxy/*', function( req, res ){
req.pipe( request({
url: config.backendUrl + req.params[0],
qs: req.query,
method: req.method
})).pipe( res );
});
Run Code Online (Sandbox Code Playgroud)
如果远程主机可用,它可以正常工作,但如果远程主机不可用,则整个节点服务器会因未处理的异常而崩溃
stream.js:94
throw er; // Unhandled stream error in pipe.
^
Error: connect ECONNREFUSED
at errnoException (net.js:901:11)
at Object.afterConnect [as oncomplete] (net.js:892:19)
Run Code Online (Sandbox Code Playgroud)
我该如何处理这些错误?
我想读一个远程图像并显示它.我可以保存文件但不能正确显示代码.理想情况下,我只想在不进行处理的情况下正确传递文件 - 不确定是否需要tmp文件步骤.此代码不显示任何内容 - 没有错误.我也尝试了res.pipe(响应).
var url = 'http://proxy.boxresizer.com/convert?resize=50x50&source=' + filename
var request = http.get(url, function(response) {
var tmp = path.join(require('os').tmpDir(), filename);
var outstream = require('fs').createWriteStream(tmp);
response.pipe(outstream);
response.on('end', function() {
res.set('Content-Type', 'image/jpg');
res.pipe(outstream);
res.end();
});
});
Run Code Online (Sandbox Code Playgroud) 我试图设置我的代理以与节点做出反应它试图在客户端的 package.json 中使用代理但是当我尝试使用 get 方法时它一直给我错误所以我搜索了另一种解决方案,我使用这个 npm 找到了这个模块(http-proxy-middleware),我运行 npm cache clean --force 命令来清除所有缓存,这样任何人都可以告诉我这是什么错误,或者如果有任何其他方法我可以尝试让我的应用程序正常工作
这是我的 server.js 文件
const express = require('express');
const connectDB = require('./config/db');
const app = express();
//connect database
connectDB();
// Init Middelware
app.use(express.json({ extended: false }));
const port = process.env.PORT || 6000;
app.get('/', (req, res) => {
res.send('api running');
});
// Define route
app.use('/api/users', require('./router/api/user'));
app.use('/api/posts', require('./router/api/post'));
app.use('/api/profile', require('./router/api/profile'));
app.use('/api/auth', require('./router/api/auth'));
app.listen(port, () => {
console.log(`server started in port ${port}`);
});
Run Code Online (Sandbox Code Playgroud)
这是我的 setupProxy.js 文件
const proxy = require('http-proxy-middleware');
module.exports …Run Code Online (Sandbox Code Playgroud) 我正在参与使用 Angular Universal 制作的项目。
我需要更改blog.mywebsite.com为mywebsite.com/blogSEO,我在 中使用了代理配置ng start,如下面的代码,它工作正常,但当我运行时它不起作用build:ssr
构建的项目中没有错误,在运行node dist / server.jsshow website 后,但我称mywebsite.com / mag我重定向到 404 页面,而在npm start
"scripts": {
"ng": "ng",
"build": "ng build --prod",
"start": "ng serve -o --proxy-config src/proxy.conf.json ",
"extract": "ng xi18n --output-path=locale",
"build:ssr": "npm run build:client-and-server-bundles && npm run
webpack:server ",
"serve:ssr": "node dist/server.js",
"build:client-and-server-bundles": "ng build --prod && ng run
angular.io-example:server",
"webpack:server": "webpack --config webpack.server.config.js --devServer --
progress --colors"
},
Run Code Online (Sandbox Code Playgroud)
这是我的配置代理文件:
{ …Run Code Online (Sandbox Code Playgroud) 我想在我的反应代码中使用axios对端口8001上运行的本地快速服务器进行调用,如下所示:
axios.post('http://localhost:8001/enterInfo',{headers: { 'crossDomain': true }}, payload)
.then((response) => {
this.setState({
saved:true
})
})
Run Code Online (Sandbox Code Playgroud)
我的快递服务器正在侦听端口8001.我在快递服务器上写了一个post方法:
app.post('/postUrl', (req, res) => {
console.log(req.body);
res.send('111');
});
Run Code Online (Sandbox Code Playgroud)
但是当我从反应ui进行调用时,它会给出这个错误:
XMLHttpRequest无法加载http:// localhost:8001/enterInfo.对预检请求的响应未通过访问控制检查:请求的资源上不存在"Access-Control-Allow-Origin"标头.因此,不允许来源" http:// localhost:8080 "访问.