服务器没有收到 angular http 请求

Server does not receive angular http request

我会将数据发送到我的数据库。

所以我在 component.ts 中创建了调用我的服务的函数

ajoutText(newtext: String) {
  this.dataService.sendtext(newtext);
}

并在HTML侧

<form class="form">
  <mat-form-field class="textinput">
    <input #newtext matInput placeholder="Ajoutez votre texte" value="">
  </mat-form-field>
  <button type="button" mat-raised-button color="primary" (click)="ajoutText(newtext.value)">Ajouter</button>

</form>

然后我的服务向服务器发送数据

export class AjouttextService {
  url = "http://127.0.0.1:8080/v1";
  constructor(private http: HttpClient) { }

  sendtext(text): Observable<string> {
    console.log(text);
    return this.http.post<string>(this.url, text);
  }
}

my console.log(text) 打印我在输入字段中输入的文本。

在我的服务器端我使用 Express

var http = require("http");
var admin = require('firebase-admin');
var firebase = require("firebase");
var express = require("express");
var app = express();
var routerProj = require("./routes/routes");
var bodyParser = require("body-parser");
var port = process.env.app_port || 8080; // set our port
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
var server = app.listen(port);

app.use(function (req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header('Access-Control-Allow-Methods', 'GET, POST, PUT ,DELETE');

  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept,*");
  next();
});
var config = {
  apiKey: "XXXXXXXXXXX",
  authDomain: "datatable-18f93.firebaseapp.com",
  databaseURL: "https://datatable-18f93.firebaseio.com",
  projectId: "datatable-18f93",
  storageBucket: "datatable-18f93.appspot.com",
  messagingSenderId: "282475200118"
};
firebase.initializeApp(config);


var serviceAccount = require("./ServiceAcountKey.json");
admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: "https://datatable-18f93.firebaseio.com"
});
app.use("/v1", routerProj);
//Create HTTP server and listen on port 8000 for requests

// Print URL for accessing server
console.log("Server running at http://127.0.0.1:8080/");

然后在我的路由器中,我将数据插入我的 Firebase 数据库

router.use(function (req, res, next) {
  // do logging
  console.log("HI");
  next(); // 
});
...
router
  .route("/")
  .post(function (req, res, err) {
    console.log("test")
    // Get a database reference to our posts
    var db = admin.database();
    var ref = db.ref("/");

    // Attach an asynchronous callback to read the data at our posts reference
    ref.push(
      {
        "text": req.body
      }

    );

  });

问题是我的服务器没有检测到客户端发送的请求。路由第一行的 console.log("test") 不会在我的控制台上打印 "test" console.log('Hi') ..

服务器是运行和客户端。不知道为什么路由没有用

你快到了。您忘记了一行代码,这是 Angular.

中的常见错误

您忘记订阅您的 sendText 功能。如果您不订阅,您的 http 调用将不会启动!

this.dataService.sendtext(newtext).subscribe( data => console.log(data));

我在 Glitch 上整理了一个示例后端 API:

https://glitch.com/edit/#!/sun-sardine?path=server.js:1:0

获取请求将发送至 https://sun-sardine.glitch.me/api/articles。这是 Postman 的屏幕截图,向您展示如何通过 post 请求访问 API:

Postman

有关使用 Node/Express 创建 API 的更多信息,我发现 Gothinkster RealWorld Node Express 示例应用程序是一个很好的起点:

https://github.com/gothinkster/node-express-realworld-example-app

希望对您有所帮助:)