如何在 Angular 中轻松显示来自 MongoDB 的代码数组?

Posted

技术标签:

【中文标题】如何在 Angular 中轻松显示来自 MongoDB 的代码数组?【英文标题】:How can I easily display an array of codes from MongoDB in Angular? 【发布时间】:2022-01-12 22:45:41 【问题描述】:

我正在尝试构建一个简单的应用程序,允许用户将代码提交到数据库并简单地将这些代码显示给他们。我的数据库模型看起来像this,其中的文本是要显示的实际代码。出于某种原因,我无法让代码显示在网页上,它可能很小。目前,网页上没有任何显示,但 API 测试在soapUI 中有效

这是我获取代码的 API

router.get("/codes", async(req, res) => 
  try 
    Code.find(, function(err, codes) 
      if (err) 
        console.log(err);
        res.status(501).send(
          message: `MongoDB Exception: $err`,
        );
       else 
        console.log(codes);
        res.json(codes);
      
    );
   catch (e) 
    console.log(e);
    res.status(500).send(
      message: `Server Exception: $e.message`,
    );
  
);

我的代码架构

let codeSchema = new Schema(
  
    text:  type: String, unique: true, dropDups: true ,
  ,

   collection: "codes" 
);

module.exports = mongoose.model("Code", codeSchema);

我的 home.ts 文件

export class HomeComponent implements OnInit 
  codes = new MatTableDataSource<Code>([]);
  constructor(private http: HttpClient) 

  fetchCodes(): void 
    this.http
      .get('http://localhost:3000/api/codes')
      .subscribe((res: Code[]) => 
        this.codes.data = res;
      );
  

  ngOnInit(): void 
    this.fetchCodes();
    console.log(this.codes);
  

和我的 html

  <ng-container matColumnDef="code">
    <th mat-header-cell *matHeaderCellDef> Codes </th>
    <td mat-cell *matCellDef="let code"> codes </td>
  </ng-container>

【问题讨论】:

这是您的完整 HTML 文件还是您只是跳过了 table 标记? 【参考方案1】:

试试这个:

<td mat-cell *matCellDef="let code"> codes | json </td>

【讨论】:

【参考方案2】:

您的 ts 文件还应该像这样定义显示的列:

displayedColumns: string[] = ['code'];     

你的 HTML 文件应该是这样的:

 <table mat-table [dataSource]="codes" class="mat-elevation-z8">
         
     <ng-container matColumnDef="code">
         <th mat-header-cell *matHeaderCellDef>Code</th>
         <td mat-cell *matCellDef="let code"> code </td>
     </ng-container>
            
            
     <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
     <tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
 </table>

只有当你的 API 返回一个字符串数组时,上述方法才有效。

const codes = ['code1', 'code2', 'code3'];

【讨论】:

谢谢!我现在有一些东西要显示,但它显示为 [object Object] @johnf 你的代码对象结构是什么? 我在 TS 文件中有这两行:codes = new MatTableDataSource([]);显示列:string[] = ['code'];以及代码模式中的文本字段,我想知道我是否还需要以某种方式访问​​数据库中的文本字段 @johnf 尝试检查与console.log(res) 通话的结果。你能提供其中一个包含的对象吗? 是的!我从 console.log link 得到这个

以上是关于如何在 Angular 中轻松显示来自 MongoDB 的代码数组?的主要内容,如果未能解决你的问题,请参考以下文章

验证来自 Mongo 的 JSON?

如何在 Angular 5 中显示来自 Json Mapper 的数据?

如何在Angular 11中显示来自另一个组件的模态组件

如何从静态后端路径在 Angular 中显示图像?

如何使用mongo在sinatra的handsontable中轻松加载数十亿条记录?

使用 Mongo/Express/Angular/Node 推送到模型中的数组