我是编码的新手,目前正在开发靠近仪表板的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>
此外,我该如何处理除法?因为添加“”或()会使值无效,并且没有任何反应。 (另外,如果我除以数字,则数字为红色)
答案 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()
,除非我在这里不了解问题。在这种情况下,请随时纠正我。