【问题标题】:Why Node JS is not calling the service method from the controller?为什么 Node JS 不从控制器调用服务方法?
【发布时间】:2021-06-02 01:13:06
【问题描述】:

我正在开发一个 Node JS 项目,其中我的应用具有以下文件夹结构:

src
│   index.js        # Entry point for application
└───config          # Application environment variables and secrets
└───controllers     # Express controllers for routes, respond to client requests, call services
└───interfaces      # Interfaces for Database models
└───middlewares     # Operations that check or maniuplate request prior to controller utilizing
└───models          # Database models
└───routes          # Express routes that define API structure
└───services        # Encapsulates all business logic

每当我尝试调用服务文件中存在的方法时,问题是它在进入它并进入 catch 之后会跳过该行。以下是我的控制器和服务的代码:

admin.controller.ts

import * as dotenv from 'dotenv';
import { Request, Response } from 'express';
import ERROR_TYPES from '../config/error';
import db from '../models';
import { AdminService } from '../services/admin.service';

export class AdminController {

    adminService = new AdminService();
    constructor() {
        dotenv.config();
    }

    async updateAdminUser(req: Request, res: Response) {
        try {
            console.log('a')
            let x = await this.adminService.updateAdminUserImpl(req.body, req.params.id); // By debugging I saw it's coming to this line and then going inside the catch block and not giving any error message
            console.log(x);
            res.status(ERROR_TYPES.UPDATED_SUCESSFULLY.code).send({ success: true, data: '', message: ERROR_TYPES.UPDATED_SUCESSFULLY.message, status: ERROR_TYPES.UPDATED_SUCESSFULLY.status });
        } catch(error) {
            res.status(ERROR_TYPES.SERVER_ERROR.code).send({ success: false, data: '', message: error, status: ERROR_TYPES.SERVER_ERROR.status });
        }
    }
}

admin.service.ts

import * as dotenv from 'dotenv';
import { Request } from 'express';
import { AdminUserI } from '../interfaces/admin_user.interface';
import db from '../models';

export class AdminService {

    constructor() {
        dotenv.config();
    }

    private Validator(data: AdminUserI): boolean {
        console.log(data);
        return false;
    }

    async updateAdminUserImpl(req: any, id: string) {
        console.log(req);
        if(this.Validator(req)) {
            try {
                await db.AdminUser.update(req, { where: { id: id } });
                return { success: true, data: '', message: 'xyz' };
            } catch(error) {
                return { success: true, data: '', message: error };
            }
        } else {
            return { success: true, data: '', message: 'def' };
        }
    }
}

我不明白它从哪里停止。我关注了一些博客,例如this one,但仍然无法弄清楚。

【问题讨论】:

标签: javascript node.js typescript express


【解决方案1】:

您将整个请求传递给输入类型声明为 AdminUserI 的函数。

if(this.Validator(req))

private Validator(data: AdminUserI)

【讨论】:

  • 我没有传递整个请求,而是传递了req.body,它只写在控制器
猜你喜欢
  • 2016-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-14
  • 1970-01-01
  • 2018-02-05
相关资源
最近更新 更多