首页 > 解决方案 > 使用 express.js + mysql + ejs + typeORM 视图中未显示数据

问题描述

如果我有一些愚蠢的问题,我很抱歉,最后,我是 node.js 的新手,我的问题是我无法在 express.js 框架中显示来自实体的数据,我正在使用 Mysql 和 TypeORM , 和 ejs 模板引擎。

我尝试了很多示例,下面是其中之一 https://github.com/typeorm/typescript-express-example 但似乎不起作用。

我的编辑器是 VSC,下面是我的目录。目录

下面是我的代码

1 - 实体(MasterKategori.ts):

import {Column, Entity, PrimaryGeneratedColumn} from "typeorm";

@Entity("mst_kategori")
export class MasterKategori {

    @PrimaryGeneratedColumn()
    public id: number;

    @Column("varchar")
    public KodeKategori: string;

    @Column("varchar")
    public NamaKategori: string;

    @Column("varchar")
    public Keterangan: string;

    @Column("timestamp")
    public AddDate: Date;

    @Column("datetime")
    public ModifiedDate: Date;

    @Column("int")
    public ModifiedUser: number;

    @Column("int")
    public AddUser: number;
}

2 - 索引.ts

下面是我的 index.ts,在这个脚本中我称之为路由(routes.ts):

import dotenv from "dotenv";
import express from "express";
import path from "path";
import "reflect-metadata";
import {createConnection} from "typeorm";

import * as routes from "./routes";
createConnection().then(async (connection) => {
    dotenv.config();

    const port = process.env.SERVER_PORT;
    const app = express();

    app.set( "views", path.join( __dirname, "views" ) );
    app.set( "view engine", "ejs" );

    routes.web(app);

    app.listen(port);
    console.log(`Alhamdulillah, aplikasi ini menggunakan port ${port}!`);
}).catch((error) => console.log("TypeORM connection error: ", error));

3 - 路线.ts:

import * as express from "express";
import HomeController from "./controllers/HomeController";

export const web = ( app: express.Application ) => {
   // default homepage routes, and calling the controller
   app.get( "/", HomeController.home);
};

4 - mycontroller (HomeController.ts),在这段代码中我调用实体 (MasterKategori.ts) 并渲染到视图,我使用的是 ejs 模板引擎

import * as express from "express";
import {getConnection} from "typeorm"; //calling typeORM
import {MasterKategori} from "../entity/MasterKategori"; //calling the Entity

class HomeController {
    public home = (request: express.Request, response: express.Response) => {
        const kategoriData = getConnection().getRepository(MasterKategori).find(); //get all data
        const kategori = Object.entries(kategoriData);
        response.render("page", {kat: kategori});
    }
}

export default new HomeController();

5 - 视图(page.ejs)

<ul>
    <% kat.forEach(function(katdata){ %>
        <li><%= katdata.NamaKategori %> - <%= katdata.KodeKategori %></li>
    <% }) %>
</ul>

以下是mysql表和记录:

select * from `mst_kategori`;

    id  KodeKategori  NamaKategori  Keterangan  AddDate              ModifiedDate         ModifiedUser  AddUser  
------  ------------  ------------  ----------  -------------------  -------------------  ------------  ---------
     1  Coba          Coba          Coba        2019-05-25 09:21:00  0000-00-00 00:00:00             0          0
     2  lagi          lagi          lagi        2019-05-25 10:02:48  0000-00-00 00:00:00             0          0

不幸的是,结果在浏览器中显示为空白,如果我执行“console.log(kategori)”,则返回“[]”(未给出数据)。

我非常感谢您的任何帮助,我最终为这个问题感到头疼。

但是我是 node.js 的新手,这将帮助我从 express.js 中的 ORM 和 MVC 开始为我的项目

标签: mysqlnode.jsexpressejstypeorm

解决方案


它工作了现在,我把'等待',非常感谢你,下面是更新:

import * as express from "express";
import {getConnection} from "typeorm";
import {MasterKategori} from "../entity/MasterKategori";

class HomeController {

    public home  = async (request: express.Request, response: express.Response) => {
        const kategoriData = await getConnection().getRepository(MasterKategori).find();
        const kategori = Object.entries(kategoriData);
        console.log(kategori);
        response.render("page", {kat: kategori});
    }
}

export default new HomeController();

推荐阅读