无法从Node API获取数据

时间:2018-10-25 08:05:41

标签: node.js angular

我有一个使用node的API(Localhost:3000)和一个使用Angular 6的前端(Localhost:4200)。使用常规的chrome浏览器,我可以在API中使用CRUD到数据库,但是当我使用android模拟器使用(10.0.2.2:4200),我再也无法对数据库执行任何CRUD了。请在下面查看我的代码:

节点[index.js]

on message 10msMessage
{
  if (20msTask_Free) 
   {
    20msTask_Free=0;
    20msTask();
   }
}

角形前端 这是在data.service中

const express   = require("express");
const nedb      = require("nedb");
const rest      = require("express-nedb-rest");
const cors      = require("cors");

const app = express();

const datastore = new nedb({
    filename: "mycoffeeapp.db",
    autoload: true
});

const restAPI = rest();
restAPI.addDatastore('coffees', datastore);

app.use(cors());
app.use('/', restAPI);

app.listen(3000);

在组件中:

import { Injectable } from "@angular/core";
import { HttpClient } from "@angular/common/http";

@Injectable({
  providedIn: "root"
})
export class DataService {
  public endpoint = "http://localhost:3000";


  constructor(
    private http: HttpClient
  ) {}

  getList(callback) {
    this.http.get(`${this.endpoint}/coffees`)
      .subscribe(response => {
        callback(response);
      });
  }

  get(coffeeId: string, callback) {
    this.http.get(`${this.endpoint}/coffees/${coffeeId}`)
      .subscribe(response => {
        callback(response);
      });
  }

  save(coffee, callback) {
    if (coffee._id) {
      this.http.put(`${this.endpoint}/coffees/${coffee._id}`, coffee)
        .subscribe(response => {
          callback(true);
        });
    } else {
      this.http.post(`${this.endpoint}/coffees`, coffee)
      .subscribe(response => {
        callback(true);
      });
    }
  }
}

1 个答案:

答案 0 :(得分:1)

如果您运行模拟的android设备并尝试访问10.0.2.2:4200上的开发环境,那么只要该仿真器在同一网络上,您就可以访问angular应用。

现在,您需要确保可以从本地计算机外部访问您的API,并在角度范围内使用IP地址设置API网址

export class DataService {
  public endpoint = "http://10.0.2.2:3000";

如果您使用localhost,这将指向仿真设备本身,而该设备没有您的API runnnig