Math.eval帮助:有时函数起作用,有时不起作用

时间:2019-01-28 13:14:19

标签: node.js express math mongoose

我是编码的新手,目前正在开发靠近仪表板的wep应用程序。 我正在使用node js,express和mongoose。

我已经定义了模式并从用户那里收集数据。 我希望一些数据可以用于计算。

这是我的模特

var mongoose = require("mongoose"),
    math     = require('mathjs');

//*****DATABASE CONFIG*******
// Demog Database
 var headcountSchema = new mongoose.Schema({
    headct_start: Number,
    headct_end: Number,
    m_mgr: Number,
    f_mgr: Number,
    m_stf: Number,
    f_stf: Number,
    m_ops: Number,
    f_ops: Number,
    m_mru: Number,
    f_mru: Number,
    m_intl: Number,
    etc....
    created: {type: Date, default: Date.now},
    user: {
      id: {
       type: mongoose.Schema.Types.ObjectId,
       ref: "User"
      },
     username: String
    }
    });
module.exports = mongoose.model("Headcount", headcountSchema);

我使用以下格式进行所有计算:

headcountSchema.virtual('totalmanager').get(function() {  
    return math.eval(this.m_mgr + this.f_mgr);
});

我不明白为什么上面的代码适用于某些代码,而不适用于其他代码,尽管它们的格式完全相同。

例如,它适用于totalmanager,而不适用于该经理:

headcountSchema.virtual('totalintl').get(function() {  
    return math.eval(this.m_intl + this.f_intl);
});

headcountSchema.virtual('totalmru').get(function() {  
    return math.eval(this.m_mru + this.f_mru);
});

因此,当我将其传递给我的ejs文件时,什么都没有出现:

<div class="four wide column grid ui statistic">
  <div class="value">
    <%=headcounts.totalmru%>
  </div>
  <div class="label">
    Employees in Mru
  </div>

此外,我该如何处理除法?因为添加“”或()会使值无效,并且没有任何反应。 (另外,如果我除以数字,则数字为红色)

1 个答案:

答案 0 :(得分:0)

由于m_mgr, f_mgr, m_mru, f_mru的类型已明确定义为数字,因此您无需执行math.eval(),因此可以轻松返回表达式。

headcountSchema.virtual('totalmanager').get(function() {  
    return this.m_mgr + this.f_mgr;
});

headcountSchema.virtual('totalintl').get(function() {  
    return this.m_intl + this.f_intl;
});

headcountSchema.virtual('totalmru').get(function() {  
    return this.m_mru + this.f_mru;
});

math.eval()函数评估以字符串表示的JavaScript代码。发送的参数可以是字符串形式。

如果您要发送表达式 math.eval(2 + 2)math.eval(4)= 4相同 因为表达式将被执行然后被求值。因此您最好直接使用2 + 2而无需使用math.eval()(除非您要发送字符和字符串)。

注意要发送的值的类型。

 math.eval('2 + 2') = 4 
 math.eval('2' + '2') = 22
 math.eval('2' + '+' + '2')= 4
 math.eval('2' + 2))= 22

因此,我不建议在这种情况下使用math.eval(),除非我在这里不了解问题。在这种情况下,请随时纠正我。