哈喽,这回咱们要聊的是服务器渲染里的破事儿,那就是如何让后台接口顺畅运转。别急,我这儿有个秘诀,就是用请求那个包轻松搞定!做好迎接新知识的准备?
const request = require('request')
function request (uri, options, callback) { if (typeof uri === 'undefined') { throw new Error('undefined is not a valid uri or options object.') } var params = initParams(uri, options, callback) if (params.method === 'HEAD' && paramsHaveRequestBody(params)) { throw new Error('HTTP HEAD requests MUST NOT include a request body.') } return new request.Request(params) }
大家都知道 request 这个家伙怎么用吗?就把 url 扔进去,就搞定了 get 请求!简单?记住,新手们!它还有其他实用的小功能,像那个得留心的参数。而且,用起来方便得很,参数传输也是多样化,让我们来看看具体咋样!
// 方式一 request(url,options,callback) // 方式二 let options = { url // 必填 } request(options,callback)
想在Forms里马上获取用户输入?传点参数给form就搞定。对了,忘了告诉你,requesting还附赠个特好用的调试功能,只要设request.debug = true就能开起来!感兴趣的话,立马去试试看用pm2 start app.js –watch触发你的项目,再拿pm2 log一探究竟查询日志!
// 方式一 request.get(url,options,callback) // 方式二 let options = { url // 必填 } request.get(options,callback) // 方式一 request.post(url,options,callback) // 方式二 let options = { url } request.post(options,callback)
Post请求可不像Axios、Fetch那样简单,它特别复杂,需要处理各种情况。还有,接受什么样的数据还得看发起的是什么请求!比如,Get请求就习惯性地用那种名叫”application/x-www-form-urlencoded”的编码方式传递消息,这个已经成为惯例。
function initParams (uri, options, callback) { // 处理没有传 options 的情况 if (typeof options === 'function') { callback = options } var params = {} if (typeof options === 'object') { extend(params, options, {uri: uri}) // 传递的 url 最终也会被合并到 pramas 上 // 并且如果你在 options 传递了 uri 会被第一参数覆盖,优先级以 第一个入参uri为准 } else if (typeof uri === 'string') { extend(params, {uri: uri}) } else { // 处理第一参数不是url的情况 extend(params, uri) } params.callback = callback || params.callback return params }
想要在formData里加个附件么?简单!用fs.createReadStream拿到文件,扔给formData就行了。而且,不用管什么设置或者前端后端的事情,当你看见content-type变为multipart/form-data就对了,提示你已经成功了~
// 定义了 baseUrl 后只需要传递接口 api 即可 function fetchPost(path,params){ return new Promise( (resolve,reject)=>{ request.post(path,{ baseUrl:"http://localhost:9000/react/", },function(err, httpResponse, body){ if(err){ reject(err) }else{ resolve(body) } }) }) } // 使用,只传递了接口部分最终会拼接成 http://localhost:9000/react/c-request router.get('/c-request',async ctx=>{ let res = await fetchPost('request-header',{value:1,name:'dd'}) ctx.body = res })
哈喽!记住,这个参数要放到 body里头,千万别忘记加上 “json=true” 。这样一搞,你的请求 content-type就变成 application/json了,连同传过去的 body数据都会帮你自动变身成为 JSON 格式咯。是不是觉得特别省心?接着说,咱用 pm2 去启动 app.js 的时候,别忘了在后边加个 “requests” ,这样处理起来更顺手些。
好了,相信你已经搞懂request这款神器了!它就是帮咱们顺利完成服务器通信和和后台配合滴。如果你在忙着开发服务器渲染或者后台相关项目的话,赶紧去试试request!惊喜肯定让你意想不到!今天,我们学到了怎么借助request解决服务器问题。它用途贼广,可以满足我们各种奇怪的要求。如果你熟悉Server-side Rendering(SSR)或者ftware Backend Interface Development(SBID)的话,那request可千万不能错过!别忘了分享给你的小伙伴们
function fetchPost(path,params){ return new Promise( (resolve,reject)=>{ request.debug = true request.post(path,{ form:params },function(err, httpResponse, body){ if(err){ reject(err) }else{ resolve(body) } }) }) }
评论0