我的休息Api不会与Ionic-2

时间:2016-11-07 18:57:05

标签: node.js heroku ionic2

我为我的ionic-2 android应用程序做了一个休息api,但是我的http请求无法从我的其他api服务获取数据 我用node.js和源代码在这里做了一个休息api

  

server.js

 var express = require("express");
 var app = express();
 var bodyParser = require("body-parser");

 app.use(bodyParser.urlencoded({
  extended:true
 }));

 app.use(bodyParser.json());

 var port = process.env.PORT || 8080;
 var router = express.Router();

 router.get('/',function(req,res){
    res.json({
        "message":"hello world"
       });
 });

 app.use('/api',router);

 app.listen(port);

 console.log("Listening Port");
  

的package.json

{
"name": "node-api",
"main": "server.js",
  "dependencies": {
    "express": "~4.0.0",
    "mongoose": "~3.6.13",
    "body-parser": "~1.0.1"
  }
}

我在这里推送了heroku服务及其地址 my heroku rest api link

我来自另一个目录的ionic2应用程序

  

home.ts

import { Component } from '@angular/core';

import { NavController } from 'ionic-angular';
import {Http} from '@angular/http';
import 'rxjs/add/operator/map';  
@Component({
  selector: 'page-home',
  templateUrl: 'home.html'
})
export class HomePage {
   data:any;
   constructor(public navCtrl: NavController,http:Http) {

  http.get("https://appish.herokuapp.com/api")
     .map((res) =>res.json())
     .subscribe((data)=>{
     this.data = JSON.stringify(data);
   })
  }
 }
  

home.html的

<ion-header>
  <ion-navbar>
    <ion-title>
     Api
    </ion-title>
 </ion-navbar>

<ion-content padding>
    {{data}}
</ion-content>

当我使用'ionic serve'运行此代码时,没有错误且没有数据,但如果我尝试其他json站点来获取数据,则它正在运行,例如 我正在尝试ip.jsontest.com 我可以得到数据 问题出在哪里

谢谢 〜

2 个答案:

答案 0 :(得分:1)

这看起来像是一个CORS问题。

尝试将其添加到server.js的开头,看看它是否可以解决您的问题。

app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  next();
});

如果这不起作用,您应该查看浏览器调试工具中的网络选项卡。如果您得到响应并且可以看到数据,那么您的离子代码就会出错。如果您没有获得任何数据,那么您的服务器代码或与服务器的连接就会出现问题。

答案 1 :(得分:0)

  

替换了server.js

var express = require("express");
var app = express();
var bodyParser = require("body-parser");

app.use(bodyParser.urlencoded({
   extended:true
}));
//answer is here..
app.use(function(req,res,next){
  res.header("Access-Control-Allow-Origin","*");
  res.header("Access-Control-Allow-Headers","Origin, X-Requested-With, Content-Type, Accept");
next();
});
///
app.use(bodyParser.json());

var port = process.env.PORT || 8080;
var router = express.Router();

router.get('/',function(req,res){
        res.json({
         "message":"hello world"
        });
 });

 app.use('/api',router);

 app.listen(port);

 console.log("Listening Port");