New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
第 22 题:node 中间层怎样做的请求合并转发 #28
Comments
1) 什么是中间层
2)中间层可以做的事情
3)node转发API(node中间层)的优势
4)如何做请求合并转发
5)不使用用第三方模块手动实现一个nodejs代理服务器,实现请求合并转发 1.实现思路
2.实现步骤
const http = require("http");
const server = http.createServer();
server.on('request',(req,res)=>{
res.end("hello world")
})
server.listen(3000,()=>{
console.log("running");
})
const http = require("http");
const server = http.createServer();
server.on('request',(req,res)=>{
// 通过req的data事件和end事件接收客户端发送的数据
// 并用Buffer.concat处理一下
//
let postbody = [];
req.on("data", chunk => {
postbody.push(chunk);
})
req.on('end', () => {
let postbodyBuffer = Buffer.concat(postbody);
res.end(postbodyBuffer)
})
})
server.listen(3000,()=>{
console.log("running");
}) 这一步主要数据在客户端到服务器端进行传输时在nodejs中需要用到buffer来处理一下。处理过程就是将所有接收的数据片段chunk塞到一个数组中,然后将其合并到一起还原出源数据。合并方法需要用到Buffer.concat,这里不能使用加号,加号会隐式的将buffer转化为字符串,这种转化不安全。
const http = require("http");
const server = http.createServer();
server.on("request", (req, res) => {
var { connection, host, ...originHeaders } = req.headers;
var options = {
"method": req.method,
// 随表找了一个网站做测试,被代理网站修改这里
"hostname": "www.nanjingmb.com",
"port": "80",
"path": req.url,
"headers": { originHeaders }
}
//接收客户端发送的数据
var p = new Promise((resolve,reject)=>{
let postbody = [];
req.on("data", chunk => {
postbody.push(chunk);
})
req.on('end', () => {
let postbodyBuffer = Buffer.concat(postbody);
resolve(postbodyBuffer)
})
});
//将数据转发,并接收目标服务器返回的数据,然后转发给客户端
p.then((postbodyBuffer)=>{
let responsebody=[]
var request = http.request(options, (response) => {
response.on('data', (chunk) => {
responsebody.push(chunk)
})
response.on("end", () => {
responsebodyBuffer = Buffer.concat(responsebody)
res.end(responsebodyBuffer);
})
})
// 使用request的write方法传递请求体
request.write(postbodyBuffer)
// 使用end方法将请求发出去
request.end();
})
});
server.listen(3000, () => {
console.log("runnng");
}) |
@Genzhen 可以具体讲一下基于create-react-app搭建的项目如何做node中间层吗?开发环境使用的是webpack-dev-server, |
create-react-app 打包出静态页面后,可以由node中间层进行渲染即可,比如使用swig等模板引擎等等。 |
欢迎在下方发表您的优质见解
The text was updated successfully, but these errors were encountered: