今天复盘node.js的请求转发写法
在往上找了一篇文章摘抄了教程
https://www.jianshu.com/p/6356f4c928c1
代码如下:
serverA.js
var express = require('express');
var app = express();
app.get('/', function(req, res){
res.send({data: {code: 200, success: true, list: [1, 2, 3]}});
});
app.listen(8091);
serverB.js
var express = require('express');
var request = require('request');
var app = express();
app.use('/', function(req, res) {
var url = 'http://localhost:8091' + req.url;
console.log(url, req.url);
request({
uri: url,
method: 'GET',
json: true,
}, function(_err, _res, res_body){
console.log('res, body', _res, res_body);
_res.json(res_body);
})
});
var server = app.listen(8092,()=>{
console.log('the server is started! running 8092');
})
不辱使命,果然报错了res.json is not a function
我查了一篇文章,博主说这种情况一般是变量名相同,导致变量用混了。。。
所以经过尝试,发现 正确的写法应该是:
var express = require('express');
var request = require('request');
var app = express();
app.use('/', function(req, res) {
var url = 'http://localhost:8091' + req.url;
console.log(url, req.url);
request({
uri: url,
method: 'GET',
json: true,
}, function(_err, _res, res_body){
console.log('res, body', _res, res_body);
res.json(res_body); // 这边的res是指app.use上边的回调函数参数res 而非当前的_res
})
});
var server = app.listen(8092,()=>{
console.log('the server is started! running 8092');
})