![](/img/trans.png)
[英]How to make a request to sails.js controller without using sails.io client helper methods
[英]Make a HTTP request in your Controller - sails.js
是否可以在控制器中提出請求? 我曾嘗試使用 node.js http 模塊,但沒有任何成功。 有沒有其他方法可以做到這一點?
好的,我設法使用另一個模塊“請求”解決了這個問題。 我做了什么:
在你的項目中安裝模塊:
npm install -S request
在你的代碼中你應該有:
var request = require('request'); request.get({ url: <your url> }, function(error, response, body) { if (error) { sails.log.error(error); } else { sails.log.info(response); sails.log.info(body); } });
對於來自未來的人們,自 2020 年 2 月 11 日起,請求包已完全棄用。
請求推薦的替代選擇如下。
+-------------------+-------------+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Package Name | Bundle Size | API Style | Summary |
+-------------------+-------------+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| node-fetch | 0.4kb | promise / stream | A light-weight module that brings window.fetch to Node.js |
+-------------------+-------------+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| bent | 1kb | fp / promise / stream | Functional HTTP client w/ async/await |
+-------------------+-------------+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| got | 48.4kb | promise / stream | Simplified HTTP requests |
+-------------------+-------------+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| make-fetch-happen | 442kb | promise / stream | make-fetch-happen is a Node.js library that wraps node-fetch-npm with additional features node-fetch doesn’t intend to include, including HTTP Cache support, request pooling, proxies, retries, and more! |
+-------------------+-------------+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| axios | 11.9kb | promise / stream | Promise based HTTP client for the browser and node.js |
+-------------------+-------------+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| unfetch | 1kb | promise / stream | Tiny 500b fetch “barely-polyfill” |
+-------------------+-------------+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| superagent | 18kb | chaining / promise | Small progressive client-side HTTP request library, and Node.js module with the same API, sporting many high-level HTTP client features |
+-------------------+-------------+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| tiny-json-http | 22kb | promise | Minimalist HTTP client for GET and POSTing JSON payloads |
+-------------------+-------------+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| needle | 164kb | chaining / promise | The leanest and most handsome HTTP client in the Nodelands |
+-------------------+-------------+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| urllib | 816kb | callback / promise | Help in opening URLs (mostly HTTP) in a complex world — basic and digest authentication, redirections, cookies and more. |
+-------------------+-------------+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
我將節點的本機 https.get(或 http.get)包裝在一個承諾中,並從控制器調用,如下所示:
const https = require('https')
// wrap node's https.get stream call as a promise
// note: assumes utf-8 encoded data payload to get.
async function getdata(url) {
return new Promise((resolve, reject) => {
https.get(url, (res) => {
res.setEncoding('utf8');
let data = '';
res.on('data', (chunk) => {
data = data + chunk;
});
res.on('end', () => {
resolve(data);
})
}).on('error', (e) => {
reject(e);
});
});
}
// Call from sails controller
module.exports = {
myaction: async function(req, res) {
let data;
try {
data = await getdata('https://example.com/index.html');
} catch (e) {
// handle it
}
...
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.