2016-09-01 2 views
0

Я не понимаю, что здесь уникально. Я пытаюсь просто загрузить все объекты класса, называемые активными, но я продолжаю получать эту ошибку, когда пытаюсь сохранить результаты.Поставляемые параметры не соответствуют какой-либо сигнатуре целевого вызова в приложении Angular2 MEAN

asset.service.ts (24, 23): Прилагаемые параметры не соответствуют какой-либо подписи цели вызова

У меня есть следующий код

assets.component.ts

export class AssetsComponent implements OnInit { 

    constructor(private assetService: AssetService, private errorService: ErrorService) { } 

    assets: Asset[] = []; 

    ngOnInit() { 
    this.assetService.getAssets() 
     .subscribe(
     assets => { 
      console.log('assets is', assets); 
      this.assets = assets; 
      this.assetService.assets = assets; 
     }, 
     error => this.errorService.handleError(error) 
    ) 
    } 

} 

asset.service.ts

@Injectable() 
export class AssetService { 
    @Output() asset: Asset; 
    assets: Asset[] = []; 

    constructor(private _http: Http) { } 

    getAssets() { 
    return this._http.get('http://localhost:3000/asset') 
     .map(response => { 
     const data = response.json().obj; 
     console.log('getAssets data from response is'); 
     console.log(data); 
     let objs: any[] = []; 
     for (let i = 0; i < data.length; i++) { 
      console.log('Asset Data here is', data[i]); 
      let asset = new Asset(data[i].name, data[i].mimetype, data[i].filename, data[i].local_path, data[i].size); 
      objs.push(asset); 
     } 
     return objs; 
     }) 
     .catch(error => Observable.throw(error.json())); 
    } 

} 

и в моих assets.js маршрутов (в узле с помощью экспресс) Я

router.get('/', function(req, res, next) { 
    Asset.find() 
    //.populate('name', 'filename') 
    .exec(function(err, docs) { 
     if (err) { 
     return res.status(404).json({ 
      title: 'An Error occured', 
      error: err 
     }); 
     } 
     console.log('node get docs are'); 
     console.log(docs); 
     res.status(200).json({ 
     asset: 'Success', 
     obj: docs 
     }); 
    }); 
}); 

моя asset.ts модель Angular2 выглядит следующим образом:

export class Asset { 
    name: string; 
    mimetype: string; 
    filename: string; 
    local_path: string; 
    size: number; 
    s3loc: string; 
    thumb_local_path: string; 
    proxy_local_path: string; 
    thumb_s3_path: string; 
    proxy_s3_path: string; 

... constructor follows... 

ответ

0

Так что это оказалось чем-то простым, как ожидалось, но я не видел этого ответа при поиске. Несмотря на то, что я знаю, когда запускается этот конкретный вызов getAssets, он обычно не будет возвращать все поля в ответ, чтобы это работало. Все поля должны быть учтены в новом разделе Asset для создаваемого объекта в службе активов.

поэтому линия выше:

let asset = new Asset(data[i].name, data[i].mimetype, data[i].filename, data[i].local_path, data[i].size); 

Должно быть на самом деле

let asset = new Asset(data[i].name, data[i].mimetype, data[i].filename, data[i].local_path, data[i].size, data[i].s3loc, data[i].thumb_local_path, data[i].proxy_local_path, data[i].thumb_s3_path, data[i].proxy_s3_path);