【问题标题】:Upload images to a different domain nodejs将图像上传到不同的域nodejs
【发布时间】:2015-02-09 06:52:51
【问题描述】:

背景

我尝试使用angular-file-upload 模块将图像从 localhost:3000 上传到 localhost:9000,我认为它们是不同的域,应该属于 CORS(跨域资源共享)。我看到this module supports CORS。我还遵循他们推荐的快速服务器设置here。但我仍然看不到请求中的正文对象或文件对象中的任何内容。

问题

  1. 既然这个模块支持CORS,为什么好像还是不行。
  2. 我是否应该明确告诉节点服务器在响应标头中设置一些内容,例如 (访问控制允许方法、访问控制允许来源、访问控制允许标头) 以及如何在快递中做到这一点? res.setHeader(.....) ?
  3. 如何解决这个问题?

代码

/* ***************************** ANGULAR ***************************************** */
var myApp = angular.module('myApp', ['angularFileUpload']);
myApp.controller('MyCtrl', [ '$scope', '$upload', function($scope, $upload) {
  $scope.$watch('files', function(files) {
    if (files) {
        for (var i = 0; i < $scope.files.length; i++) {
          var file = $scope.files[i];
          $scope.upload = $upload.upload({
            url: 'http://localhost:9000/upload/',
            data: {myObj: $scope.myModelObj},
            file: file,
          }).progress(function(evt) {
            console.log('progress: ' + parseInt(100.0 * evt.loaded / evt.total) + '% file :'+ evt.config.file.name);
          }).success(function(data, status, headers, config) {
            console.log('file ' + config.file.name + 'is uploaded successfully. Response: ' + data);
          });
        }
    }
  });
}]);

/* ***************************** SERVER SIDE ***************************************** */
var multipart = require('connect-multiparty');
var express = require('express');
var bodyParser = require('body-parser')
var _ = require('underscore');
var path = require('path');
var app = express();

app.use(multipart({
    uploadDir: './uploads'
}));

// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }));

// parse application/json
app.use(bodyParser.json());

app.use(function (req, res, next) {
    console.log(req.files); // {} why ????
    console.log(req.body); // {} why ????
});

app.listen(9000);

【问题讨论】:

  • 尝试 res.header("Access-Control-Allow-Origin", "*");
  • @Dinesh 不幸的是,它不起作用:(

标签: angularjs node.js file-upload express cors


【解决方案1】:

实际上,我通过使用一个名为cors 的中间件来解决这个问题。所以服务器代码看起来像这样

var multipart = require('connect-multiparty');
var express = require('express');
var cors = require('cors');
var bodyParser = require('body-parser')
var app = express();

app.use(multipart({
    uploadDir: './uploads'
}));

// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }));

// parse application/json
app.use(bodyParser.json());

// cors middleware
app.use(cors());

app.use(function (req, res, next) {
    console.log(req.files); // then there is something : )
    next();
});

app.listen(9000);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-23
    • 1970-01-01
    • 2015-04-29
    • 1970-01-01
    • 2016-05-29
    • 1970-01-01
    • 1970-01-01
    • 2020-04-29
    相关资源
    最近更新 更多