javascript - 使用 Node js 中的 if 条件发布数据所需的逻辑(需要验证)

标签 javascript node.js mongodb mongoose mongoose-schema

这是我现有的架构,

const mongoose = require('mongoose');

const position = mongoose.Schema({
    startIndex: { type: Number, required: true },
    endIndex: { type: Number, required: false },
}); 

const Column = mongoose.Schema({
    name: { type: String, required: true },
    type: { type: String, enum: ["Description","ID","Time"], required: true },
    positions: [position],
    dataType: { type: String, enum: ["int", "float", "Double","String"], required: true },
    oldName: {type:String, required: false }
});

const enrichedEventSchema = mongoose.Schema({
    _id: mongoose.Schema.Types.ObjectId,
    projectId: { type: mongoose.Schema.Types.ObjectId, ref: 'Project', required: true },
    name: { type: String, required: true,unique: true },
    DataSourceID: { type: String, required: false},
    delimiter: { type: String, required: true },
    format: {type:String, enum:["JSON","DELIMITED","FixedWidth","LOG"], required: true},
    columns:[Column]
});

module.exports = mongoose.model('EnrichedEvent', enrichedEventSchema);


Api for Post route:

router.post("/:projectId/events/enriched", (req, res, next) => {
    const enrichedEvent = new EnrichedEvent({
        _id: mongoose.Types.ObjectId(),
        name: req.body.name,
        projectId: req.params.projectId, //taking from url
        delimiter: req.body.delimiter,
        format: req.body.format,
        columns:req.body.columns,
     });

    return enrichedEvent.save()
        .then(result => {
            res.status(201).json({
                message: "Event stored",
                createdEvent: {
                    _id: result._id,
                    projectId: result.projectId,
                    name: result.name,
                    type: result.type,
                    delimiter: result.delimiter,
                    columns:result.columns,
                    format:result.format
                }
            });
        })
        .catch(err => {
            console.log(err);
            res.status(500).json({
                error: err
            });
        });
});

我的要求是 所有 EnrichedEvents 应至少有 2 列,其中一列用

定义

类型 = ID, 类型 = 时间。

if FORMAT = DELIMITED  then data must have Delimiter Field; ALL Columns should have a mandatory Starting Index. 
if FORMAT = FIXEDWIDTH  then data must have all Columns should have mandatory Starting and Ending Index.

我能想到的就是使用 if 条件,像这样。

 if ( req.body.format == 'DELIMITED' )
 {
//then how to use my schema in my code??
 }

我被困在这个问题上三天了,没有明白逻辑。任何帮助将不胜感激。

最佳答案

尝试制定两种不同的方案。

const positionDel = mongoose.Schema({
    startIndex: { type: Number, required: true },
    endIndex: { type: Number, required: false },
}); 
const positionFixed = mongoose.Schema({
    startIndex: { type: Number, required: true },
    endIndex: { type: Number, required: true},
});

关于javascript - 使用 Node js 中的 if 条件发布数据所需的逻辑(需要验证),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51395940/

相关文章:

javascript - GraphqlJS-类型冲突-无法使用联合或接口(interface)

node.js - 如何在没有 Express 的情况下提供多个文件

node.js - 如何在 Jest 中模拟重载方法?

node.js - MongoDB 投影参数在 findOne() 中不起作用

javascript - Google Gears 和 jQuery 创建 managedStore 的问题

javascript - 顶点颜色变为白色

javascript - JavaScript 中的 "callback"关键字

javascript - 如何使用 mocha.js 测试多个异步流程事件

java - SpringData MongoDB - 转换通用子文档字段

mongodb - Mongoid::Versioning - 如何检查以前的版本?