当前位置: 首页 > 知识库问答 >
问题:

Blog Submit功能将日志保存到数据库,但不会在angular组件中显示日志

贺山
2023-03-14

我正在尝试用angular和MongoDB创建一个博客。当我提交博客时,它会保存在数据库中(使用postman进行检查)。我在输入标记和ckeditor中输入的数据也会出现在测试mat-card组件中。但当我尝试提交博客时,它不会显示在blog-page组件中。blog存储在数据库中。我的onBlogSubmit()函数有问题,但我不知道是什么问题:

这是我尝试过的:

我的post.service.ts文件:

import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Post } from '../post/post';
import { Observable, throwError } from 'rxjs';
import 'rxjs/add/operator/map';

export interface post {
  success: boolean;
  post: any;
  token: any;
}

@Injectable({
  providedIn: 'root'
})

export class PostService {
  authToken: any;
  post: any;
  public baseUri: string = 'http://localhost:3000/blogs';
  public headers = new HttpHeaders().set('Content-Type', 'application/json');


  constructor(private http: HttpClient) { }

  getPosts(): Observable<post> {
    this.loadToken();
    const head = this.headers.append('Authorization', this.authToken);
    return this.http.get<post>(this.baseUri + '/allPosts', { headers: head });
  }

  getPost(id): Observable<post> {
    this.loadToken();
    const head = this.headers.append('Authorization', this.authToken);
    return this.http.get<post>(this.baseUri + '/singlePost/' + id, { headers: head })
  }

  addPost(post): Observable<post> {
    this.loadToken();
    const head = this.headers.append('Authorization', this.authToken);
    return this.http.post<post>(this.baseUri + '/newPost', post, { headers: head });
  }

  updatePost(id, post: post): Observable<any> {
    this.loadToken();
    const head = this.headers.append('Authorization', this.authToken);
    return this.http.put<post>(this.baseUri + '/editPost/' +id , post, { headers: head });
  }

  deletePost(id): Observable<post> {
    this.loadToken();
    const head = this.headers.append('Authorization', this.authToken);
    return this.http.put<post>(this.baseUri + '/deletePost/' + id, { headers: head });
  }


  public loadToken() {
    const token = localStorage.getItem('id_token');
    this.authToken = token;
  }
}

我的博客-添加组件.ts:

import { Component, OnInit } from '@angular/core';
import { PostService } from '../Services/post.service';
import { FormControl, FormGroup, FormBuilder, Validators } from '@angular/forms';
import { Router } from '@angular/router';
import { FlashMessagesService } from 'angular2-flash-messages';

@Component({
  selector: 'app-blog-add',
  templateUrl: './blog-add.component.html',
  styleUrls: ['./blog-add.component.scss']
})

export class BlogAddComponent implements OnInit {

    postTitle: string;
    postAuthor: string;
    postContent: string;
    postImgUrl: string;
    post = {};

  constructor(private postService: PostService,
    private formBuilder: FormBuilder,
    private router: Router,
    private flashMessage: FlashMessagesService) {
  }

  ngOnInit(): void {
  
  }

// THIS IS WHERE THE PROBLEM OCCURS
  onBlogSubmit() {
    const post = {
      postTitle: this.postTitle,
      postAuthor: this.postAuthor,
      postContent: this.postContent,
      postImgUrl: this.postImgUrl
    }

    this.postService.addPost(post).subscribe(data => {
      if(data.success) {
        this.postService.getPosts();
        this.flashMessage.show('Blog Submitted Successfully', {cssClass: 'alert-success', timeout: 3000});
        this.router.navigate(['/blog-page']);
      } else {
        this.flashMessage.show('Something Went Wrong', {cssClass: 'alert-danger', timeout: 3000});
      }
    });
  }

}

我的博客-添加组件HTML:

<app-header></app-header>
<div class="row" *ngIf="post">
  <div class="col-sm-12 form-main">
      <form name="postForm" (ngsubmit)="onBlogSubmit()" class="text-center border border-light p-5 shadow-lg">

        <input type="text" class="form-control mb-4" placeholder="Name" [(ngModel)]="post.postTitle" name="postTitle">
        <input type="text" class="form-control mb-4" placeholder="Username" [(ngModel)]="post.postAuthor" name="postAuthor">
          <img ng-src="postImgUrl">
          <ckeditor matCkeditor class="form-control mb-8" [(ngModel)]="post.postContent" name="postContent"></ckeditor>
          <button mat-raised-button type="submit" class="btn btn-success btn-block get" (click)="onBlogSubmit()">Submit</button>
      </form>
    </div>
  </div>

我的博客页面ts文件,我想在那里查看博客数据。

import { Component, OnInit } from '@angular/core';
import { PostService } from '../Services/post.service';
import { Router } from '@angular/router';

@Component({
  selector: 'app-blog-page',
  templateUrl: './blog-page.component.html',
  styleUrls: ['./blog-page.component.scss']
})
export class BlogPageComponent implements OnInit {
    post: Object;

  constructor(private postService: PostService, private router: Router) {}

  ngOnInit(): void {
    this.postService.getPosts().subscribe(posts => {
        this.post = posts.post;
    },
    err => {
        console.log(err);
        return false; 
    });
  }

}

我的博客页面组件HTML:

<app-header></app-header>
<div fxLayout="row wrap" fxLayoutAlign="center">
  <mat-card *ngIf="post" class="card">
      <mat-card-header>
        <mat-card-title class="title">{{post.postTitle}}</mat-card-title>
        <mat-card-subtitle class="subtitle">Author: {{post.postAuthor}}</mat-card-subtitle>
        <mat-card-subtitle class="subtitle">Content: {{post.postContent}}</mat-card-subtitle>
        </mat-card-header>
        <mat-card-actions class="multi-button">
        <button mat-icon-button><span class="fa fa-share fa-lg"></span></button>
        <button mat-icon-button><span class="fa fa-trash fa-lg"></span></button>
        <!-- <button mat-icon-button><span class="fa fa-heart fa-lg"></span></button> -->
        </mat-card-actions>
      </mat-card>
  </div>

<app-footer></app-footer>

控制台或浏览器中没有错误。博客只是不提交,并给出错误消息,我编程到它。我一直没能弄清楚这个问题。我已经测试了我在输入和ckeditor中输入的数据是否出现在mat-card模块中,并且它工作良好。谁能告诉我我在这里做错了什么。谢谢!!!

共有1个答案

鲁鹏
2023-03-14

由于您正在调用的端点没有返回.success属性,因此无法使用该属性来确定调用是否成功。

答复中是否有其他数据表明它是否成功?

如果不是,也许您可以假设一个非错误响应是成功的,并在错误处理程序中捕获错误:

  onBlogSubmit() {
    const post = {
      postTitle: this.postTitle,
      postAuthor: this.postAuthor,
      postContent: this.postContent,
      postImgUrl: this.postImgUrl
    }

    this.postService.addPost(post).subscribe(
        data => {
            this.postService.getPosts();
            this.flashMessage.show('Blog Submitted Successfully', {cssClass: 'alert-success', timeout: 3000});
            this.router.navigate(['/blog-page']);
        },
        error => {
            this.flashMessage.show('Something Went Wrong', {cssClass: 'alert-danger', timeout: 3000});
        }
    );
  }
 类似资料:
  • 问题内容: 我的构建服务器上正在运行单元测试,并且想在发生故障时捕获日志结果以进行分析。我还没有找到一种将输出重定向到文件或找到日志文件实际所在位置的方法。 我想要的是: 编辑-澄清: 我所有的Docker容器都会生成有用的日志,这些日志会手动显示。我想编写脚本以将那些相同的日志保存到构建服务器上的工件文件中。本质上,保存到文件的输出不会退出。 问题答案: 默认情况下,docker使用驱动程序记录

  • 问题内容: 我需要在运行的Jenkins作业的 控制台输出 中显示日志文件(测试计算机中存在)。 那可能吗?如果是,我该怎么做? 问题答案: 根据需要选择执行Windows批处理命令或执行Shell 然后使用“ cat log.file”(Linux)“ type log.file”(Windows)显示

  • 谁知道如何从头开始迁移? 我像往常一样使用命令运行迁移 但不是运行迁移-我收到 谁知道会有什么问题?我需要手动添加数据交换日志和数据交换日志吗?这对我来说很奇怪,因为当我与其他框架分开使用liquibase时,它会为我生成这个表。

  • 目前系统对于接收外部接口请求,需要记录日志,返回处理结果时更新返回结果到日志表,同样向外部接口接口请求时,记录接口请求消息到日志,收到接口返回或调用失败时更新处理结果到日志表,要求业务处理失败时回滚数据,但仍然记录日志处理结果,请问如何优雅的处理?

  • 我的数据确实显示在console.log中,但实际上没有显示在表中,我在这里做错了什么?

  • 问题内容: 我正在尝试将日志消息保存到中央数据库。为了做到这一点,我在log4j的xml配置中配置了以下Appender: 正常工作,除了某些消息包含’,然后附加程序失败。 是否有捷径可寻? 问题答案: 看一下这个非官方的Log4J JDBCAppender ,它可以解决此问题并在Apache 2.0许可下分发。引用其功能以进行比较: 登录到(关系)数据库 灵活的连接处理(尚不支持数据源) 灵活的