带有JSON数组数据的AngularJS POST请求到Express服务器

瓦希耶

我有一个静态AngularJS网站和一个运行在不同域上的Express服务器。该站点以文件名作为参数将GET请求发送到服务器。然后,服务器从S3存储桶中请求文件,该文件以“ binary / octet-stream”作为“ Content-Type”发送。它解密数据,然后使用相同的“ Content-Type”将其发送回站点,然后下载文件。对于单个文件请求,这一切都很好,但是我希望能够一次向服务器发送一个文件名数组,然后能够下载多个文件。我尝试将文件名作为JSON数组发送,但出现错误:

XMLHttpRequest无法加载http:// localhost:3000 / decrypt对预检请求的响应未通过访问控制检查:在所请求的资源上不存在“ Access-Control-Allow-Origin”标头。因此,不允许访问原始文件“ file://”。

在我的服务器控制台中,该请求显示为OPTIONS而不是POST。我还确保Access-Control-Allow-Origin: *在响应标头中包含该标头。我应该如何解决这个问题?

更新:
通过在路由器上添加以下中间件,我能够解决CORS错误:

function allowCrossDomain(req, res, next) {
  if ('OPTIONS' == req.method) {
    res.header('Access-Control-Allow-Origin', '*');
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,PATCH,OPTIONS');
    res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With');
    res.status(200).end();
  }
  else {
    next();
  }
}

但是,我仍然不确定如何在响应中发送多个(每个文件)“ binary / octet-stream”,并将其作为文件下载到静态站点上。目前,我正在使用angular-file-saver保存单个请求中的文件。

Ohjay44

您需要在服务器中做几件事。首先您使用multerbodyParserMulter将允许您添加来电,并为您处理数据传递。

AngularJS的第一篇文章:

$http.post(baseUrl + "mypostmethod", o) //o is your object
       .then(function successCallback(resp) {
           console.log(resp)
       }, function errorCallback(resp) {
           console.log(resp)
       });

现在,对于您的nodejs express设置,您要确保使用了所有正确的模块。我将提供我在大多数项目中使用的基本列表。同样,如果您使用req.headers.origin*而不是*,则不会再收到该Access-Control-Allow-Origin错误。

NodeJS:

var express = require('express'),
fs = require('fs'),
spdy = require('spdy'),
bodyParser = require('body-parser'),
multer = require('multer'),
helmet = require('helmet'),
upload = multer(), // this will allow you to pass your object into your post call with express
path = require('path'),
cookieParser = require('cookie-parser'),
request = require('request'),
app = express(),
http = require('http'),
formidable = require('formidable'); //Good for handling file uploads

app.use(helmet());
app.use(cookieParser());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
    extended: true
}));
app.use(function(req, res, next) {
    res.header('Access-Control-Allow-Credentials', true);
    res.header('Access-Control-Allow-Origin', req.headers.origin);
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,PATCH');
    res.header('Access-Control-Allow-Headers', 'X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version');
    next();
});

这些是我几乎所有程序中都使用的基本程序。最重要的expressbodyParsermulter因为这些使您可以正确使用gets和post。

这是一个发布NodeJS的示例:

app.post('/mypostmethod', upload.array(), function(req, res) {
    var body = req.body,
        sess = req.session;
    res.send({
        Status: "Success"
    });
});

在这篇文章中,当您使用时upload.array(),它正在利用multer,现在req.body是您通过角度发布调用传递的对象。

让我知道您是否有任何问题,希望对您有所帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

POST 请求不将数据返回给 Express 即服务器

如何使用带有 nodeJS 的 express 侦听对已经在侦听的服务器发出的 POST 请求

发送带有“ operationName”和“ variables”的POST请求到阿波罗服务器

Axios POST 请求将数据发送到 Express 服务器但错误 404

获取/POST请求到服务器:接收multipart/form-data时为空数组;

AJAX POST请求永远不会完成。数据发布到服务器

使用 React.js 和 Express.js POST 表单数据到服务器

向Express Server发出多个AngularJS Post请求?服务器在第二次发布请求时崩溃

无法将带有二进制文件的POST发布到Node.js Express服务器

使用带有 jQuery 的 POST 请求将数据发送到服务器

如何发出将数组发布到服务器的请求?

如何防止余烬数据发送请求到服务器?

AngularJS 路由到 Express 服务器的路径

GET请求到前端服务器并返回JSON对象

如何发送JSON格式的HTTP请求到服务器?

JSON POST 请求在服务器端获取异常

从android中的服务器下载图像的JSON POST请求

Chrome没有向服务器提交POST请求

通过ajax发送数据到express服务器的问题

没有从axios请求读取的json数据到nodejs服务器

如何在 ESP32 服务器上处理带有 JSON 有效负载的 POST 请求?

带有POST请求的500个内部服务器错误-Slim框架

带有标头请求的 HttpClient 或 Http POST 未到达服务器

如何将带有Express对象的http服务器绑定到特定的IP地址?

ajax请求从用户到服务器的数据相同,请求格式出现问题

无法通过POST请求将json数据发送到服务器

使用Ajax POST请求将图像和JSON数据发送到服务器?

Json POST请求数据未到达Play Framework 2中的服务器

服务器端在IIS服务器上包含(ssi),读取POST请求数据失败