ng-file-upload 没有达到正确的端点

ng-file-upload not hitting correct endpoint

我正在使用 MEANJS。我在客户端使用 ng-file-upload 上传文件。问题是,在我为上传定义的 url 中,其中没有参数,但是当到达端点时,它会调用它认为其中有参数的函数。这个 upload 是在创建一个新的 activity 时完成的(activities 与默认的 articles 结构相同)

控制器:

function save(isValid) {
    Upload.upload({
        url: 'api/activities/gpxData', // no optional parameter ':activityId'
        data: {
            file: $scope.gpxData
        }
        }).then(function(resp) {
            console.log(resp);
        }, function(resp) {
            console.log(resp)
        }, function(evt) {

        }
    });     
}

这些都是我route定义的:

app.route('/api/activities').all(activitiesPolicy.isAllowed)
    .get(activities.list)
    .post(activities.create);

app.route('/api/:userId/activities').all(activitiesPolicy.isAllowed)
    .get(activities.usersActivities)
    .post(activities.create);

app.route('/api/activities/:activityId').all(activitiesPolicy.isAllowed)
    .get(activities.read)
    .put(activities.update)
    .delete(activities.delete);

app.route('/api/:userId/activities/:activityId').all(activitiesPolicy.isAllowed)
    .get(activities.read)
    .put(activities.update)
    .delete(activities.delete);

app.route('/api/activities/gpxData').all(activitiesPolicy.isAllowed)
    .post(activities.uploadGpx);

// Finish by binding the Activity middleware
app.param('activityId', activities.activityByID);

即使在 url 中没有传递可选参数 (activityId),也会调用函数 activities.activityByID这个:

exports.activityByID = function (req, res, next, id) {
    if (!mongoose.Types.ObjectId.isValid(id)) {
        return res.status(400).send({
            message: 'Activity is invalid'
        });
    }
};

此外, 中传递了一个 id(这是正在创建的 activityid 但我知道不知道来自哪里,它不是有效的 id,因为它尚未输入 mongo。

是您的快递码中的路由排序导致的。因为 /api/activities/gpxData 适合模式 /api/activities/:activityId。 路由在第一个匹配规则处停止并执行。这是各种技术中路由的标准实现。

移动

app.route('/api/activities/gpxData').all(activitiesPolicy.isAllowed)
   .post(activities.uploadGpx);

之前

app.route('/api/activities/:activityId').all(activitiesPolicy.isAllowed)
   .get(activities.read)
   .put(activities.update)
   .delete(activities.delete);

然后尝试运行。