【问题标题】:typescript express typeorm createconnectiontypescript express typeorm createconnection
【发布时间】:2018-10-04 23:47:49
【问题描述】:

我正在使用 typescript express node typeorm 创建一个应用程序。我遇到了这个问题,当我使用 typeorm 通过服务类调用数据库时,找不到连接默认值。这是我的代码 sn-ps:

//dataservice class
import { Connection, getConnection, EntityManager, Repository, 
getManager } from "typeorm";

export class LeaveDataService {
private _db: Repository<Leave>;

constructor() {
    this._db = getManager().getRepository(Leave);
}

/**
 * applyForLeave
 */
public applyForLeave(leave: Leave): void {
    if(leave !== null) {
        let entity: Leave  = this._db.create(leave);
        this._db.save(entity);
    }
}

/**
 * getAllLeaves
 */
public async getAllLeaves(): Promise<Array<Leave>> {
    let leaves: Promise<Array<Leave>> = this._db.find({
        select: ["leaveDays","casualLeaveDays","id","staff","leaveType","endorsedBy","approvedBy"],
        relations: ["staff", "leaveType"],
        skip: 5,
        take: 15
    });

    return leaves;
}

这是我的 ormconfig.json

{
    "type":"sqlite",
    "entities": ["./models/*.js"],
    "database": "./leaveappdb.sql"
}

这是通过调用作为第一个 sn-p 的服务类来响应请求的“控制器”:

import { Request, Response } from "express";
import { LeaveDataService } from "../services/leaveDataService";
import { LeaveIndexApiModel } from '../ApiModels/leaveIndexApiModel';



const dataService: LeaveDataService = new LeaveDataService();

export let index = async (req: Request, res: Response) => {
let result = await dataService.getAllLeaves();
let viewresult = new Array<LeaveIndexApiModel>();

result.forEach(leave => {
    let apmodel = 
    new LeaveIndexApiModel(leave.leaveType.name, 
`${leave.staff.firstname} ${leave.staff.lastname}`, leave.id);
    viewresult.push(apmodel);
});


return res.status(200).send(viewresult);
}

那么这就是我引导我的应用程序的地方。

import express = require('express');
import bodyParser = require('body-parser');
import path = require('path');
import * as home from './controllers/home';
import { createConnection } from 'typeorm';
import * as leavectrl from "./controllers/leaveController";
//create express server


//create app db connection.
createConnection().then(async connection => {
const app = express();
console.log("DB online!");
const approot = './';
const appport = process.env.Port || 8001;
//setup express for json parsing even with urlencoding
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(express.static(path.join(approot,'dist')));

//serve and respond to routes by api
app.get('/home', home.home);
app.get('/login',home.login);

//routes for leave
app.get('/api/leaves', leavectrl.index);
//default fall through
// app.get('*', (req: Request, res: Response)=>{
//     res.sendFile(approot,'dist/index.html');
// });

app.listen(appport, ()=> console.log(`api is alive on port 
${appport}`));

}).catch(error => console.log("Data Access Error : ", error));

【问题讨论】:

  • 你在哪一行得到错误?如果您只有一个连接(与用于开发和登台的连接...),您可以在 ormconfig 'default' 中命名您的一个连接
  • 好吧,我不太了解 express,但如果我记得,您可以使用 getConnection().manager.getReposiory 方法,该方法应该读取您的连接配置文件并创建您需要的内容。我的疑问是在您的配置文件中,数据库应该是数据库名称?
  • @jonathan default 如果你只有一个数据库配置,则默认给出
  • @Jesus Gilberto 数据库不应该是一条路径!你的权利。所以你是对的

标签: node.js typescript express typeorm


【解决方案1】:

您的配置似乎不错,但您没有调用或使用您的 ormconfig.json 文件来创建连接。

例如:

createConnection(./ormconfig.json).then(async connection => {
}).catch(error => console.log("Data Access Error : ", error));

尝试使用,否则我会给你一种方法来配置类对象以建立数据库连接

在配置文件中:

import "reflect-metadata";
import { ConnectionOptions } from "typeorm";
import { abc } from "../DatabaseEntities/abc";
import { def } from '../DatabaseEntities/def';

export let dbOptions: ConnectionOptions = {
            type: "sqlite",
            name: app,
            database: "./leaveappdb.sqlite3", 
            entities: [abc, def],
            synchronize: true,
} 

在 server.ts 中

import { createConnection, createConnections } from 'typeorm';
import * as appConfig from './Config/config';
createConnection(appConfig.dbOptions).then(async connection => {
    console.log("Connected to DB");
}).catch(error => console.log("TypeORM connection error: ", error));

我想这可能对你有帮助..

另外,我发现为了连接 sqlite DB,您正在尝试连接一个 sql 文件。请确认一次。

谢谢

【讨论】:

    猜你喜欢
    • 2023-02-26
    • 2020-09-25
    • 2020-01-05
    • 2021-07-09
    • 2020-04-29
    • 1970-01-01
    • 2020-09-19
    • 2015-12-19
    • 2020-01-03
    相关资源
    最近更新 更多