node.js - 函数的Nodejs可见性
问题描述
我在调用 Nodejs 应用程序中的函数时遇到了一些问题。主要代码是这个:
var express = require('express');
var bodyParser = require('body-parser');
var morgan = require('morgan');
var mongoose = require('mongoose');
var app = express();
//------------------------------------
//Configuration
//------------------------------------
var config = require('./config.js');
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
//CORS Fixing
var cors = require('cors');
app.use(cors());
//------------------------------------
//Routes
//------------------------------------
app.use('/machine', require('./app/routes/machine.js'));
//------------------------------------
//Server Start
//------------------------------------
mongoose.connect(config.DATABASE, { useNewUrlParser : true });
app.listen(config.SERVICE_PORT,config.SERVICE_IP);
简而言之,我的应用程序使用这样的路线:
var express = require('express');
var router = express.Router();
var MachineManager = require("../managers/MachineManager");
router.route('/:id/addInsurance').post(function(req,res){
MachineManager.addInsurance(req.machine,req.body.emission,req.body.annual_fee,req.body.num_installment,req.body.company,function(err,data){
if(err || !data){
res.json({
success: false,
message: 703,
data: data
});
}else{
res.json({
success: true,
message: 803,
data: data
});
}
});
});
逻辑在于Manager
我对 mongoDB 的所有查询。
我无法调用refreshExpInsurance
经理的其他功能:
var Machine = require('../models/machine.js');
var config = require('../../config.js');
var _ = require('lodash');
var Manager = {
addInsurance: function(machine, emission, annual_fee, num_installment, company, callback){
machine.update({
$push: {
"insurance":{
$each: [{
"emission": emission,
"annual_fee": annual_fee,
"num_installment": num_installment,
"freeze" : false,
"company": company
}], $position : 0
}
}
}, function(err,data){
if (err || !data) callback(err, null);
else this.refreshExpInsurance(machine, callback);
});
},
....
refreshExpInsurance(machine, callback){
c = new Date(machine.insurance[0].emission);
installments = 12 / machine.insurance[0].num_installment;
if(machine.insurance[0].payed_installment) installments = installments * machine.insurance[0].payed_installment;
c = new Date(c.getFullYear(), c.getMonth() + installments, c.getDate()+1);
from = new Date(machine.insurance[0].freeze_from);
to = new Date(machine.insurance[0].freeze_to);
diffTime = Math.abs(from - to);
diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
delta = new Date(
c.getFullYear(),
c.getMonth(),
c.getDate() + diffDays
);
date = delta.toISOString().substr(0,10);
machine.updateOne({ "exp_insurance": date },callback);
}
这样refreshExpInsurance
就找不到了,报如下错误:
TypeError:this.refreshExpInsurance 不是函数
解决方案
推荐阅读
- python - 如何通过 python pyodbc 运行嵌套存储过程?
- ios - 如何删除tableView中的用户默认数据?
- javascript - JavaScript 中的 ArrowFunction 无法按预期工作,为什么?但正常功能工作正常
- python - 如何找到我在 Pycharm 变量资源管理器中创建的变量?
- c# - Dapper SimpleCRUD 强制转换:“无法将 'System.Guid' 类型的对象转换为 'System.IConvertible' 类型。”
- scala - EMR 上的 Spark 提交失败 - _"java.lang.IllegalStateException: ... 确保 Spark 已构建。"_
- php - 使用 phpclassic/php-shopify SDK 获取商店的所有产品
- bash - Bash:使用 grep 从文本文件派生的连接变量会产生混淆的输出
- javascript - 为什么 crossfilter 不能正确排序或过滤我的数据?
- reactjs - 使用 axios 将 Authorization Bearer Token Header 从登录 API 传递到其他页面