我为我的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 我可以得到数据 问题出在哪里
谢谢 〜
答案 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");