如何构建Node.js项目并尊重DRY

时间:2018-05-12 20:31:04

标签: javascript node.js

这个问题可能被标记为过于宽泛,但我会尝试。

我对Node.js很陌生,我以前用它来执行特定的小任务,例如拦截原始套接字发出的数据,并通过Web套接字将其传递给我,这样我就可以在浏览器中实现数据了解-time。

我已经在家里用Node.js开始了一个项目(作为一个学习实验),在编写代码的过程中,我经常发现自己重复了相同的"指令"。

最终目标是拥有一个非常静态的站点,可以从数据库中获取数据,因此无论何时我想纠正错误,我都不必提交。最终结果将所有内容都包含在服务器的单个请求中,但是现在,我在模型中分离了一些数据(主要是文本)。

所以,而不是 company.model.js ,而所有模型都是这样的

let mongoose = require('mongoose');

let CompanySchema = new mongoose.Schema({
    title: String,
    description: String
});
const Company = mongoose.model('Company', CompanySchema);

module.exports = Company;

我创建了一个执行常见任务的 BaseModel ,如下所示。

let mongoose = require('mongoose');

class BaseModel {
    constructor(name, schema, collection) {
        this.name = name;
        this.collection = collection ? collection : null;
        this.schema = new mongoose.Schema(schema);
    }

    build() {
        return mongoose.model(this.name, this.schema, this.collection);
    }
}

module.exports = BaseModel;

现在, company.model.js 和其他模型将如下所示。

const BaseModel = require("@models/base/model");

module.exports = new BaseModel('company', {
    name: String,
    description: String
}).build();

服务控制器也是如此。

服务器/服务/碱/ service.js

class BaseService {
    constructor(model) {
        this.model = model;
    }

    fetchData() {
        let self = this;

        return async function (query) {
            try {
                return await self.model.find(query);
            } catch (e) {
                console.log(e.message);
            }
        }
    }
}

module.exports = BaseService;

服务器/服务/ company.service.js

let Company = require('@models/company.model');
let BaseService = require('@services/base/service');

let CompanyService = new BaseService(Company);
exports.fetchData = CompanyService.fetchData();

服务器/控制器/基站/ controller.js

class BaseController {
    constructor(service) {
        this.service = service;
    }

    getEntries(query) {
        let self = this;

        return async function (req, res) {
            try {
                let data = await self.service.fetchData(query);
                return res.status(200).json({
                    data: data
                });
            } catch (e) {
                console.log(e.message);
            }
        }
    }
}

module.exports = BaseController;

服务器/控制器/ company.controller.js

let CompanyService = require("@services/company.service");
let BaseController = require("@controllers/base/controller");

exports.getCompanies = new BaseController(CompanyService).getEntries({
    description: "whatever"
});

现在所有这一切都有效,我得到了一个功能强大的" API",准备被Angular 吞噬,但我不确定我采取的方法是好还是不。

在Node.js和Express中似乎没有标准化的东西,我读过的关于如何使用这个服务器堆栈实际构建应用程序的所有帖子都是矛盾的。

如何构建Node.js / Express项目?你如何以不必重复代码的方式制作它?

欢迎使用Resources / plain链接/样板回购。

0 个答案:

没有答案