Articles of fetch api

React Native / Node API:在发送之后无法设置标题

我遇到了一个与我的Node API交互的原生应用程序的问题。 当我尝试发布数据通过节点更新数据库中的某些值(然后转到存储过程)时,我得到一个500 – 在Node 中发送后,无法设置标题 。 我能find的所有东西都表示这可能是由于发送了两次响应。 我不认为这是这种情况。 我已经在邮递员testing,事情工作正常,它返回正确的返回数据200的状态。 我正在尝试将数据发布到API,如下所示: const myHeaders = new Headers(); myHeaders.append('Content-Type', 'application/json'); fetch(`http://localhost:3000/user/preferences`, { method: 'POST', headers: myHeaders, mode: 'cors', cache: 'default', body: JSON.stringify({ id: '1', minage: this.state.minageValue, maxage: this.state.maxageValue }) }) .then(response => response.json()) .then(body => console.log(body)) .catch(err => console.log(err)); 我在API端接收数据,并将数据传递给存储过程: function updatePreferences(req, res, next) { console.log(req); var […]

将$ ajax转换为PUT请求的提取()

我试图翻译下面的jQuery代码来使用抓取API。 它发出一个PUT请求: function save () { $.ajax('/{{user.username}}', { method: 'PUT', data: { street: $('#street').val(), city: $('#city').val(), state: $('#state').val(), zip: $('#zip').val() }, complete: function () { cancel() location.reload() } }) } 这是抓取API请求: fetch('/{{user.username}}', { method: 'PUT', headers: { 'Content-Type': 'application.json' }, body: JSON.stringify({ street: document.getElementById("street").value, city: document.getElementById("city").value, state: document.getElementById("state").value, zip: document.getElementById("zip").value }) }).then(() => { cancel() […]

尝试使用提取访问响应数据

我尝试了一些简单的地方,我使用获取API从我的应用程序的前端发出请求 let request = new Request('http://localhost:3000/add', { headers: new Headers({ 'Content-Type': 'text/json' }), method: 'GET' }); fetch(request).then((response) => { console.log(response); }); 我在服务器上处理这个请求是这样的, app.get('/add', (req, res) => { const data = { "number1": "2", "number2": "4" }; res.send(data); }); 但是,当我尝试访问前端console.log(响应)上的数据时,我得到以下对象 Response {type: "basic", url: "http://localhost:3000/add", redirected: false, status: 200, ok: true…} body:(…) bodyUsed:false headers:Headers ok:true redirected:false […]

POST请求使用Fetch API无法正常工作

我有一些重大的问题,理解为什么Fetch API不会让我发送POST请求到我的restify服务器。 我有一个基本的restify服务器,在/login上接收POST请求的路由。 如果我使用Postman或HTTPRequester进行testing,但是当我使用获取API在浏览器应用程序上对其进行testing时,此路由完全按照预期运行,但出现以下错误(在Chrome中): OPTIONS http://localhost:1337/login 405 (Method Not Allowed) Fetch API cannot load http://localhost:1337/login. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access. The response had HTTP status code 405. If an opaque response serves your needs, set […]

如何防止在node.js中两次调用相同的URL

我有数量的电话作为后端。 其中一些是相同的URL。 我正在caching结果。 但我的问题是,如果我立即用同一个URL调用loadCached两次(或几次),它实际上也会调用两次提取,因为在第一次提取被parsing之前,caching没有url。 所以,只有当一个抓取成功完成(=已解决)时,caching才起作用。 我怎样才能改进代码,等待第一次parsing,以避免重复查询? function loadCached(url) { let cache = loadCached.cache || (loadCached.cache = new Map()); if (cache.has(url)) { return Promise.resolve(cache.get(url)); // (*) } return fetch(url) .then(response => response.text()) .then(text => { cache[url] = text; return text; }); } 我正在使用promise.all()等待loadCached来解决。

mongodb:获取API POST请求返回一个奇怪的响应

我想使用fetch API将POST请求发送给mongodb。 GET请求使用获取API成功实现,但POST请求不是。 在控制台日志中,POST请求返回奇怪的响应,如下所示: {n: 1, opTime: {…}, electionId: "7fffffff0000000000000001", ok: 1} electionId:"7fffffff0000000000000001" n:1 ok:1 opTime:{ts: "6490526445679411201", t: 1} __proto__:Object 我从来没有遇到过这个回应,我不知道这意味着什么… 我的代码如下。 server.js app.post('/recipe', (req, res) => { console.log(req.body); // this console.log returns empty object : {} db.collection('recipe').insertOne(req.body, (err, result) => { if (err) return console.log(err); console.log('saved to database') res.json(result); }); }); index.js class App […]

获取无法从服务器获得响应

我有个问题。 在客户端,我使用获取API获取响应,这是代码 window.fetch('/signup', { method: 'post', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, body: formDataStr, credentials: 'same-origin' }) .then(function (response) { return response.json() }) .then(function (result) { if (result.code === 0) { return this.$router.push('/main') } }) .catch((err) => { self.isLoading = false console.log(err) }) 在服务器中,它是写在节点和expression,这是代码: `app.post('/login', function (req, res) { var loginEmail = req.body.email2 var loginPsd = […]

如何使用应用程序/ x-www-form-urlencoded头和URLSearchParams使用isomorphic-fetch进行POST

这是一个正常工作的CURL示例: curl –request POST \ –url <url> \ –header 'authorization: Bearer <authorization token>' \ –header 'content-type: application/x-www-form-urlencoded' \ –data 'category=1&userId=<uuid>' 我试图重现这个请求使用同构获取 。 我试过这个: const searchParams = new URLSearchParams(); searchParams.set('category', category); searchParams.set('userId', userId); return fetch(`<url>`, { method: 'POST', headers: { 'Authorization: Bearer <authorization token>', 'Accept': 'application/json', 'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8' }, body: searchParams })` 但是我得到一个411状态码错误响应( 需要的长度 ) […]

在同一个提取POST API调用中返回JSON

我目前有一个基于Node.js的Express框架构build的Web应用程序。 我现在正在构build一个需要执行用户login的React Native应用程序。 为此,我创build了一个mongo-helpers.js文件,它将简单地执行api调用localhost:3000 / api并返回JSON。 到目前为止,我没有任何问题进行GET调用和接收数据,但是这是我的问题,我想要做什么: 目标 :按下loginbutton(在React Native应用程序中),调用localhost:3000 / api / login,将username和password传递到fetch API POST请求的body中。 如果用户login,则发回用户的Mongo文档。 问题 :虽然我能够发出API Post请求并成功login用户,但我无法用res.json(user)发送用户的Mongo文档。 这是我的代码: Express WEB APP: routes / api / api.js // POST and login user router.post('/login', (req, res) => { user.findOne({name: req.body.name, password: req.body.password}) .then((user) => { console.log(user); res.json(user) }) .catch((error) => res.json(error)) }); 反应本机应用程序: mongo-helpers.js […]

node.js表示一个非常奇怪的行为

我有一个运行的Express服务器。 我所做的是从HTML上传Excel文件,然后快速parsing该文件,并做一些计算。 在Excel文件中,每行都有关于用户地址的信息。 对于每个地址,我们的快递服务器将使用谷歌地图地理编码API来计算经度和纬度。 但是,由于Google不接受每秒超过50个地理编码API的请求,所以我不得不使用settimeout来延迟计算。 例如,如果Excel文件有50个地址,所以我必须在每个地址上使用settimeout来避免这个速率限制。 这里是我的代码使用settimeout并计算纬度,经度 createFromFile(req, res) { var form = new formidable.IncomingForm(); return form.parse(req, function (err, fields, files) { if (err) return res.status(500).json({error: err.message}) var workbook = new exceljs.Workbook(); return workbook.xlsx.readFile(files.excelfile.path).then(function() { // use workbook var worksheet = workbook.getWorksheet(1) var data = [] for (var i=2; i<=worksheet.rowCount; i++) { data.push({ from_name: worksheet.getCell('A'+i).value […]