【问题标题】:posting to node from angular controller从角度控制器发布到节点
【发布时间】:2017-07-19 15:32:06
【问题描述】:

好的,我不明白这里发生了什么,在本地工作,但不在我的服务器上。

我有一个 Angular 控制器可以发布到我的节点服务器。

每次我尝试运行触发我收到的帖子的函数时

POST http://www.mysite.co.uk/mm3/back-end/savephotos 404(未找到)

我真的迷路了,我重写了5次我找不到问题。

如果有人能看出我哪里出错了,请帮忙。

角度控制器

mm3\js\controller.js

 //all photos've been pushed now sending it to back end
                    $timeout(function () {
                        $http.post('back-end/savephoto', $scope.photosToPhp).then(function (success) {
                            $scope.generating = false;
                            $scope.generateBtn = 'Generate';
                            //creating mock up gallery
                            for (var x = 0; x < success.data.photos; x++) {
                                var file = '/mm3/tmp/' + success.data.folder + "/out" + x + ".png";
                                $scope.gallery.push(file);
                            }
                            $scope.photosToPhp = [];
                        }, function (error) {
                        });

                    }, 800);

然后是我的节点后端

更新: 因此,我在我的函数中添加了一些控制台日志,以查看它出错的地方和到达的地方。 我不断收到:

测试 1 功能启动错误保存照片

mm3\back-end\controller.js

     app.post('/mm3/back-end/savePhoto', function (req, res) {
    console.log('test 1 function started');
    var folder = Math.random().toString(36).substr(2, 20);
    var photos = req.body;
    var counts = 0;
    var callback = function(counts){
        if(counts < photos.length){
            saveBase64(photos[counts],folder,counts,callback);
            console.log('test 2 save photo');
        }else{
            var counts = 0;
            var response = {"folder":folder, "photos": photos.length};
            console.log('test 3 save photo else');
            res.send(response)
        }
    };
    saveBase64(photos[counts],folder,counts,callback);
});

app.post('/mm3/downloadZip', function(req, res){
    var photos = req.body;
    var out =  photos[0];
    var test = out.split('/');
    var loc  = test.pop();
    var end =  test.join('/');
    console.log('test 3 function Generate zip file');
    console.log(end);
    var outName = '/' + end +'/mm3/MockUp.zip';
    var output = fs.createWriteStream(outName);
    var archive = archiver('zip', {store: true });
    var zip = function(photos, f){
        for(var t = 0; t < photos.length; t++){
            var file = 'mockUp'+ t +'.jpg';
            var from = '/var/www/html' +  photos[t];
            archive.file( from, { name: file });
        }
        f();
    };

    output.on('close', function() {
        var photos = req.body;
        var out =  photos[0];
        var test = out.split('/');
        var loc  = test.pop();
        var end =  test.join('/');
        res.send(end + '/MockUp.zip');
        console.log('archiver has been finalized and the output file descriptor has closed.');
    });
    archive.on('error', function(err) {
        throw err;
    });

    archive.pipe(output);
    zip(photos, f);
    function f(){
        archive.finalize();
    }
});

function saveBase64(photo,folder, counts, callback){
    var result = photo.split(',')[1];
    var path = '/mm3/tmp/' + folder;
    var filename = path + "/out"+ counts + ".png";
    mkdirp( path, function() {

        fs.writeFile(filename, result, 'base64', function(error){
            if (error) {
                console.log('error saving photo');
            }else{
                console.log('photo saved');
                counts ++;
                callback(counts);
            }
        });
    });
}

【问题讨论】:

  • 照片中应该包含什么[counts]?我看不到这相关的数据。
  • @FreddieColeman 更新了代码以提供更多信息

标签: javascript angularjs node.js express


【解决方案1】:

我认为这是问题所在:

app.post('back-end/savephoto', function (req, res) {
    // skipped some lines
});

改成

app.post('/back-end/savephoto', function (req, res) {
        // skipped some lines
    });

【讨论】:

  • 尝试更改两条路线,使每条路线都有一个斜线开头。此外,请确保您实际上指向 localhost 端口(我假设您正在本地运行节点)。也许尝试将localhost:xxxx 附加到 $http.post 路由。
  • @WillCarron 我在实时服务器上,在本地工作正常,但实时服务器无法正常工作
【解决方案2】:

在 Angular 中,如下:

$http.post('back-end/savephoto......

变成:

$http.post('/back-end/savephoto.....

在 Node 中,如下:

app.post('back-end/savephoto.....

变成:

app.post('back-end/savephoto....

然后,你需要在Node路由下添加一个console.log,看看它是否被执行。这将缩小范围。此外,您可以在超时之外删除 $http.post 调用以消除明显的问题。

让我知道你过得怎么样。

沙燕

【讨论】:

  • 谢谢Shayan,今天早上试试,让你知道
  • 但是你应该在控制台中得到一些东西吧?如果您没有到达那里,则存在路由问题。那么,控制台中有什么?
  • 嘿Shayan,所以我会在几秒钟内用更新的节点代码更新我的问题。在我的控制台中,我现在正在更新“错误保存照片”
  • 这是一个全新的问题。您已将整个问题改写为其他含义。您发布的原始问题已解决。关闭它并打开一个新的。此外,如果您要询问 SO,我建议您清理代码。确保将其精简到可以证明问题的最低限度。
猜你喜欢
  • 1970-01-01
  • 2016-05-19
  • 1970-01-01
  • 2018-01-26
  • 1970-01-01
  • 2019-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多