【问题标题】:Angular: Error while fetching data from Node API?Angular:从 Node API 获取数据时出错?
【发布时间】:2021-05-22 22:51:09
【问题描述】:

尝试使用 URL 从我的 Nodejs API 获取 json 数据 - localhost:3000/articles/publicationDataPostman 应用程序 中成功运行,但不知道为什么会出错在 Angular 应用程序中具有相同的 url,但在 Angular 应用程序中它给出了一个错误 -

HttpErrorResponse {headers: HttpHeaders, status: 404, statusText: "Not Found", url: "http://localhost:3000/articles/publicationData", ok: false, …}
error: "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<title>Error</title>\n</head>\n<body>\n<pre>Cannot GET /articles/publicationData</pre>\n</body>\n</html>\n"
headers: HttpHeaders {normalizedNames: Map(0), lazyUpdate: null, lazyInit: ƒ}
message: "Http failure response for http://localhost:3000/articles/publicationData: 404 Not Found"
name: "HttpErrorResponse"
ok: false
status: 404
statusText: "Not Found"
url: "http://localhost:3000/articles/publicationData" 

我的 app-service.ts 文件是 -

import { Injectable } from '@angular/core'; 
import { HttpClient} from '@angular/common/http';
import { AppSetting } from './appsetting'
@Injectable({
  providedIn: 'root'
})
export class AppServiceService {
  private SERVERURL = AppSetting.API;
  constructor(private http: HttpClient) { }

  login(user){
    console.log(user);
    return this.http.post<any>(this.SERVERURL+"users",user);
  }

  getPublication(){
    let url = "http://localhost:3000/articles/publicationData";
    return this.http.get(url);
  }


}

我的 app.component.ts 文件

import { Component, OnInit  } from '@angular/core';
import { DatepickerModule } from 'ng2-datepicker';
import { HttpClient } from '@angular/common/http';
import { Router } from '@angular/router';
import { DatepickerOptions  } from 'ng2-datepicker';
import { AppServiceService } from './../app-service.service';
import { Subscriber } from 'rxjs';



@Component({
  selector: 'app-main',
  templateUrl: './main.component.html',
  styleUrls: ['./main.component.css']
})
export class MainComponent implements OnInit {


  constructor(private http: HttpClient,private auth : AppServiceService, private _router: Router) {
    this.auth.getPublication().subscribe(data => {
      console.warn(data);
    })
   }

  ngOnInit(): void {
    $("#menu-toggle").click(function(e) {
    e.preventDefault();
    $("#wrapper").toggleClass("toggled");
  });



  }

}
 

Controller.js

    var db = require("../db.js");
var ObjectId = require('mongodb').ObjectID;
var mysql = require('mysql');

var connection = mysql.createPool({
    host: 'localhost',
    user: 'root',
    password: 'pass',
    database: 'name'
});
var publicationData = (req, res) => {
  var sql = `select pub_master.PubId, pub_master.Title,
  pub_master.MastHead, pub_master.Circulation, pub_master.WebSite,
  pub_master.Issn_Num, pub_master.Place, picklist.Name as city
  from pub_master
  join picklist on picklist.id = pub_master.Place
  and picklist.id <> 0`;

  connection.query(sql,[], function (error, results, fields) {
    if (error) {
      res.send({
        "code":400,
        "failed":"error ocurred"
      })
    }else{
      if(results.length >0){
        res.send({
          "code":200,
          result : results
        });
      }
      else{
        res.send({
          "code":204,
          "success":"Email and password does not match"
        });
      }
    }
  });
}
 
 
module.exports = {
  publicationData: publicationData
} 

出版路线

    var express = require("express");
var articlescontroller = require("../controller/articlesController")
var articlesrouter = express.Router();


articlesrouter.route('/publicationData')
.post(articlescontroller.publicationData);  

app.js

    var express = require("express");
const serverless = require('serverless-http');
var moviesrouter = require("./routes/movierouter");
var articlesrouter = require("./routes/articlesrouter");
// var mailarticlerouter = require('./routes/mailarticlerouter');
var bodyParser = require("body-parser");
var mongoos = require("mongoose");





/*****************MYSQL CONNECTION*********************/
var mysql      = require('mysql');
var connection = mysql.createPool({
  host     : '',
  user     : '',
  password : '',
  database : ''
});


/************************************* */


mongoos.set("debug", (collectionName, method, query, doc) => {
    console.log(JSON.stringify(query));
});

mongoos.Promise = Promise;

var db = mongoos.connect("mongodb+srv://aamadmin:Rix2Jag8@irmpl-zame7.mongodb.net/impact?retryWrites=true&w=majority",{useUnifiedTopology: true,useNewUrlParser:true});

console.log("connected to mongodb");

var app = express();



var cors = require('cors');
const userrouter = require("./routes/userrouter");

app.use(cors());


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 server = app.listen(3000,()=>{
    console.log("server is running on port 3000");
});
server.timeout = 600000;


module.exports.handler = serverless(app);

 
app.use('/articles',articlesrouter); 

【问题讨论】:

  • 也许尝试不在邮递员中获取数据,而是直接在 Chrome 中获取数据,然后再次在角度客户端中获取数据,检查网络选项卡并比较标题以验证 url。
  • @kogonidze 数据未以 chrome 形式出现,网址为 http://localhost:3000/articles/publicationData
  • 网络标签中有一些记录必须出现link
  • 是的,这是来自网络标签image的记录
  • @kogonidze 嘿,谢谢你的帮助解决了 :) 干杯

标签: node.js angular


【解决方案1】:

在您的 Postman 屏幕上,您需要向 localhost:3000/articles/publicationData 发送 POST 请求,而不是 GET 请求。您的代码出现 404 错误,当您尝试在浏览器中访问 localhost:3000/articles/publicationData 时,因为您正在发送 GET 请求。

在您的 Angular 代码中,更改为:

 getPublication(){
    let url = "http://localhost:3000/articles/publicationData";
    return this.http.get(url);
  }

到:

 getPublication(){
    let url = "http://localhost:3000/articles/publicationData";
    return this.http.post(url, {});
  }

【讨论】:

  • 我已经用app.jscontroller file 更新了我的代码,你也可以检查一次
  • 是的,你需要发送一个 POST 请求。 (见此行articlesrouter.route('/publicationData') .post(articlescontroller.publicationData);
  • 错误`return this.http.post(url); ~~~~~~~~~ ../node_modules/@angular/common/http/http.d.ts:2435:23 2435 post(url: string, body: any | null, options?: { ~~~ ~~~~~~~~~~~~~ 没有提供“body”的参数。`
  • 试试这个return this.http.post(url, {});
  • omg omg omg 很多的爱谢谢你,我真的很傻
猜你喜欢
  • 1970-01-01
  • 2020-05-29
  • 1970-01-01
  • 1970-01-01
  • 2021-06-19
  • 2019-01-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多