Я новичок в Angular. Я создаю демонстрационное приложение для видеоплеера после серии YouTube, но я поражен тем, что не могу получить данные для своего запроса на получение. Я использую Angular 5.2.10. Ниже приведены мои файлы и код:
const express = require('express');
const bodyParser = require('body-parser');
const path = require('path');
const api = require('./server/routes/api');
const port = 3000;
const app = express();
app.use(express.static(path.join(__dirname,'dist')));
app.use(bodyParser.urlencoded({extended:true}));
app.use(bodyParser.json());
app.use('/api',api);
app.get('*',(req,res)=>{
res.sendFile(path.join(__dirname,'dist/index.html'));
});
app.listen(port,function(){
console.log("server running on localhost"+port);
});
const express = require('express');
const router = express.Router();
const mongoose = require('mongoose');
const Video = require('../models/video');
const
db="mongodb://usersubhash:subhashpwd@ds217350.mlab.com:17350/videoplayer";
mongoose.Promise = global.Promise;
mongoose.connect(db,function(err){
if(err){
console.log("Error!"+err);
}
});
router.get('/videos',function(req,res){
//res.send('api works');
Video.find({}).exec(function(err,videos){
if(err){
console.log("error retrieving videos");
}else{
res.json(videos);
}
});
});
module.exports = router;
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const videoSchema = new Schema({
title:String,
url:String,
description:String
});
module.exports = mongoose.model('video',videoSchema,'videos');
export class Video {
_id:string;
title:string;
url:string;
description:string
}
export const environment = {
production: false,
apiUrl: 'http://localhost:3000'
};
- video.service.ts: (где у меня есть метод getVideos ())
import { Injectable } from '@angular/core';
import {Http,Response} from '@angular/http';
import 'rxjs/add/operator/map';
@Injectable()
export class VideoService {
constructor(private _http:Http) { }
private _getUrl = `${environment.apiUrl}/api/videos`;
getVideos(){
return this._http.get(this._getUrl).map((response:Response)=> response.json());
}
}
- videoCenter.component.ts: (где я подписываюсь на метод getVideos ()):
import { Component, OnInit } from '@angular/core';
import {Video} from '../video';
import { VideoService } from '../video.service';
@Component({
selector: 'app-video-center',
templateUrl: './video-center.component.html',
styleUrls: ['./video-center.component.css'],
providers:[VideoService]//,Http,HttpClientModule
})
export class VideoCenterComponent implements OnInit {
myAllVideos:Array;//here I want to put my get Request Data
constructor(private _videoService:VideoService) { }
selectedVideo:Video;
onSelectVideo (video:any){
this.selectedVideo=video;
}
ngOnInit() {
this._videoService.getVideos().subscribe(result => this.myAllVideos = result);
}
}
Когда я запускаю
<code>node server.js</code>
в терминале VSCode, тогда в приложении POSTMAN я могу получить все записи, запросив GET в "localhost: 3000 / api / videos". Но в моем приложении я не могу загрузить данные, которые работают в 4200 порт.
Когда я нажимаю кнопку, которая загружает video-center.component.ts, getVideos () запускается в ngOnInit (), но выдает эту ошибку:
![networkTabError](https://i.stack.imgur.com/6DteM.png)