成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Node.js 教程第五篇——request

silencezwm / 920人閱讀

摘要:一個第三方的模塊,可用于發(fā)起或請求,可理解成服務(wù)端的請求??捎糜诖唵蔚姆?wù)器代理,用法和類似。在使用前需要先安裝請求多參數(shù)設(shè)置請求支持和實現(xiàn)表單上傳。常用多參數(shù)設(shè)置流

Request

一個第三方的模塊,可用于發(fā)起 http 或 https 請求,可理解成服務(wù)端的 ajax 請求??捎糜诖唵蔚姆?wù)器代理,用法和 ajax 類似。

在使用前需要先安裝 npm install request --save

GET 請求
request.get("https://cnodejs.org/api/v1/topics?page=1&limit=10", (error, response, body) => {
    console.log(body)
})
//or
request("https://cnodejs.org/api/v1/topics?page=1&limit=10", (error, response, body) => {
    console.log(body)
})
多參數(shù)設(shè)置
exports.get = function(url, options) {
    options = options || {};
    var httpOptions = {
        url: url,
        method: "get",
        timeout: options.timeout || 10000,
        headers: options.headers || default_post_headers,
        proxy: options.proxy || "",
        agentOptions: agentOptions,
        params: options.params || {}
    }
    if(options.userAgent){
        httpOptions.headers = {
            "User-Agent": userAgents[options.userAgent],
        }
    }

    try{
        request.get(httpOptions, function(err, res, body) {
            if (err) {
                options.callback({status: false, error: err})
            } else {
                options.callback({status: res.statusCode == 200, error: res, data: body})
            }
        }).on("error", logger.error);
    } catch(err){
        console.log("http error");
    }
}
POST 請求

request支持application/x-www-form-urlencoded和multipart/form-data實現(xiàn)表單上傳。

application/x-www-form-urlencoded (URL-Encoded Forms)
request.post("http://service.com/upload", {form:{key:"value"}})
// or
request.post("http://service.com/upload").form({key:"value"})
// or
request.post({url:"http://service.com/upload", form: {key:"value"}}, function(err,httpResponse,body){ /* ... */ })
multipart/form-data (Multipart Form Uploads)
var formData = {
  // Pass a simple key-value pair
  my_field: "my_value",
  // Pass data via Buffers
  my_buffer: new Buffer([1, 2, 3]),
  // Pass data via Streams
  my_file: fs.createReadStream(__dirname + "/unicycle.jpg"),
  // Pass multiple values /w an Array
  attachments: [
    fs.createReadStream(__dirname + "/attachment1.jpg"),
    fs.createReadStream(__dirname + "/attachment2.jpg")
  ],
  // Pass optional meta-data with an "options" object with style: {value: DATA, options: OPTIONS}
  // Use case: for some types of streams, you"ll need to provide "file"-related information manually.
  // See the `form-data` README for more information about options: https://github.com/form-data/form-data
  custom_file: {
    value:  fs.createReadStream("/dev/urandom"),
    options: {
      filename: "topsecret.jpg",
      contentType: "image/jpeg"
    }
  }
};
request.post({url:"http://service.com/upload", formData: formData}, function optionalCallback(err, httpResponse, body) {
  if (err) {
    return console.error("upload failed:", err);
  }
  console.log("Upload successful!  Server responded with:", body);
});
常用多參數(shù)設(shè)置
exports.form_post = function(url, postdata, options) {
    // console.log(`${moment().format()} HttpFormPost: ${url}`)
    return new Promise((resolve, reject) => {
        options = options || {};
        var httpOptions = {
            url: url,
            form: postdata,
            method: "post",
            timeout: options.timeout || 3000,
            headers: options.headers || default_post_headers,
            proxy: options.proxy || "",
            agentOptions: agentOptions
        };
        request(httpOptions, function(err, res, body) {
            if (err) {
                reject(err);
            } else {
                if (res.statusCode == 200) {
                    resolve(body);
                } else {
                    reject(res.statusCode);
                }
            }
        }).on("error", logger.error);
    });
};
request("http://img.zcool.cn/community/018d4e554967920000019ae9df1533.jpg@900w_1l_2o_100sh.jpg").pipe(fs.createWriteStream("test.png"))
request("https://cnodejs.org/api/v1/topics?page=1&limit=10").pipe(fs.createWriteStream("cnodejs.json"))

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/94274.html

相關(guān)文章

  • Java3y文章目錄導(dǎo)航

    摘要:前言由于寫的文章已經(jīng)是有點多了,為了自己和大家的檢索方便,于是我就做了這么一個博客導(dǎo)航。 前言 由于寫的文章已經(jīng)是有點多了,為了自己和大家的檢索方便,于是我就做了這么一個博客導(dǎo)航。 由于更新比較頻繁,因此隔一段時間才會更新目錄導(dǎo)航哦~想要獲取最新原創(chuàng)的技術(shù)文章歡迎關(guān)注我的公眾號:Java3y Java3y文章目錄導(dǎo)航 Java基礎(chǔ) 泛型就這么簡單 注解就這么簡單 Druid數(shù)據(jù)庫連接池...

    KevinYan 評論0 收藏0
  • 「Odoo 基礎(chǔ)教程系列」五篇——從 Todo 應(yīng)用開始(4)

    摘要:在前面教程中,我們使用了兩種類型的視圖和今天我們將學(xué)習(xí)使用另一種類型的視圖搜索視圖。大家可以試試看同時應(yīng)用多個分組,或者將分組和過濾器組合使用,仔細觀察和思考產(chǎn)生的結(jié)果。還是老規(guī)矩,教程中的代碼會更新在倉庫中。 showImg(https://segmentfault.com/img/bVbgO85?w=1950&h=1300); 在前面教程中,我們使用了兩種類型的視圖——TreeVi...

    xiyang 評論0 收藏0
  • SpringBoot非官方教程 | 五篇:SpringBoot整合 beatlsql

    摘要:整合階段由于沒有對的快速啟動裝配,所以需要我自己導(dǎo)入相關(guān)的,包括數(shù)據(jù)源,包掃描,事物管理器等。另外它的中文文檔比較友好。源碼下載參考資料中文文檔 BeetSql是一個全功能DAO工具, 同時具有Hibernate 優(yōu)點 & Mybatis優(yōu)點功能,適用于承認以SQL為中心,同時又需求工具能自動能生成大量常用的SQL的應(yīng)用。 beatlsql 優(yōu)點 開發(fā)效率 無需注解,自動使用大...

    microelec 評論0 收藏0
  • 工具集核心教程 | 五篇: 利用Velocity模板引擎生成模板代碼

    摘要:歡迎關(guān)注我的微信公眾號獲取更多更全的學(xué)習(xí)資源,視頻資料,技術(shù)干貨公眾號回復(fù)學(xué)習(xí),拉你進程序員技術(shù)討論群,干貨資源第一時間分享。公眾號回復(fù)全棧,領(lǐng)取前端,,產(chǎn)品經(jīng)理,微信小程序,等資源合集大放送。公眾號回復(fù)面試,領(lǐng)取面試實戰(zhàn)學(xué)習(xí)資源。 前言 不知道大家有沒有這樣的感覺,在平時開發(fā)中,經(jīng)常有很多dao、service類中存著很多重復(fù)的代碼,Velocity提供了模板生成工具,今天我教大家怎...

    leon 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<