gpt4 book ai didi

node.js - 在服务器自身解决的路径错误中,为值 "NaN"转换为数字失败

转载 作者:行者123 更新时间:2023-12-05 04:01:02 29 4
gpt4 key购买 nike

我是 Nodejs 的初学者,我不确定我能在这里问这么简单的事情。当我建立一个 Node 服务器连接到mongodb时,得到了这个错误:

Cast to Number failed for value "NaN" at path "count"

但是,错误在几分钟后消失了,服务器以某种方式再次运行,并且插入了计数模式。

我找不到让它再次运行的东西。我只是假设我的 Node 服务器无法获取值,因为“计数”模式消失了。

但是你能帮我用更好的方式思考吗?

这是我之前遇到的错误。

  • 首先,当我检查 mongodb 中的数据收集时,没有“计数”模式。
> db.datas.find()
{ "_id" : ObjectId("5cb39eca6e5e3971fa934a2d"), "name" : "myData", "__v" : 0 }
  • 其次, Node 服务器控制台向我显示以下错误:
Data ERROR: save:  { ValidationError: data validation failed: count: Cast to Number failed for value "NaN" at path "count"
at ValidationError.inspect (/home/gkh/Desktop/Dev/myapp/node_modules/mongoose/lib/error/validation.js:59:24)
at formatValue (util.js:430:38)
at inspect (util.js:324:10)
at format (util.js:253:18)
at Console.log (console.js:130:21)
at /home/gkh/Desktop/Dev/myapp/app.js:46:30
at /home/gkh/Desktop/Dev/myapp/node_modules/mongoose/lib/model.js:4675:16
at /home/gkh/Desktop/Dev/myapp/node_modules/mongoose/lib/utils.js:255:11
at $__save.error (/home/gkh/Desktop/Dev/myapp/node_modules/mongoose/lib/model.js:471:16)
at /home/gkh/Desktop/Dev/myapp/node_modules/kareem/index.js:246:48
at next (/home/gkh/Desktop/Dev/myapp/node_modules/kareem/index.js:167:27)
at next (/home/gkh/Desktop/Dev/myapp/node_modules/kareem/index.js:169:9)
at Kareem.execPost (/home/gkh/Desktop/Dev/myapp/node_modules/kareem/index.js:217:3)
at _handleWrapError (/home/gkh/Desktop/Dev/myapp/node_modules/kareem/index.js:245:21)
at /home/gkh/Desktop/Dev/myapp/node_modules/kareem/index.js:272:14
at _next (/home/gkh/Desktop/Dev/myapp/node_modules/kareem/index.js:94:14)
errors:
{ count:
{ CastError: Cast to Number failed for value "NaN" at path "count"
at new CastError (/home/gkh/Desktop/Dev/myapp/node_modules/mongoose/lib/error/cast.js:29:11)
at model.$set (/home/gkh/Desktop/Dev/myapp/node_modules/mongoose/lib/document.js:1073:7)
at model.set [as count] (/home/gkh/Desktop/Dev/myapp/node_modules/mongoose/lib/helpers/document/compile.js:140:26)
at /home/gkh/Desktop/Dev/myapp/app.js:44:15
at /home/gkh/Desktop/Dev/myapp/node_modules/mongoose/lib/model.js:4675:16
at /home/gkh/Desktop/Dev/myapp/node_modules/mongoose/lib/query.js:4184:12
at process.nextTick (/home/gkh/Desktop/Dev/myapp/node_modules/mongoose/lib/query.js:2741:28)
at _combinedTickCallback (internal/process/next_tick.js:131:7)
at process._tickCallback (internal/process/next_tick.js:180:9)
message: 'Cast to Number failed for value "NaN" at path "count"',
name: 'CastError',
stringValue: '"NaN"',
kind: 'Number',
value: NaN,
path: 'count',
reason: [Object] } },
_message: 'data validation failed',
name: 'ValidationError' }
  • 这是 app.js 文件的一部分:
mongoose.connect("mongodb://localhost:27017/user-node");
var mongod = mongoose.connection;
mongod.once("open", function(){
console.log("DB connected!");
});
mongod.on("err", function(err){
console.log("DB err: ", err);
});

var dataSchema = mongoose.Schema({
name:String,
count:Number
});

var Data = mongoose.model('data', dataSchema);
Data.findOne({name:"myData"}, function(err, data){
if(err) return console.log("Data ERROR: ", err);
if(!data){
Data.create({name:"myData",count:0}, function(err, data){
if(err) return console.log("Data ERROR", err);
console.log("Counter initialized: ", data);
});
}
});

app.set("view engine", 'ejs');
app.use(express.static(path.join(__dirname + '/public')));

// callback function list
// render to firstPage.ejs page with params or non-params
app.get('/', function(req, res){
Data.findOne({name:"myData"}, function(err, data){
if(err) return console.log("Data ERROR : /path: ", err);
data.count++;
data.save(function(err){
if(err) return console.log("Data ERROR: save: ", err);
res.render('firstPage', data);
});
});
});
// set count to 0
app.get('/reset', function(req, res){
setCounter(res, 0);
});
// check arg in req.query.count
app.get('/set/count', function(req, res){
if(req.query.count) setCounter(res, req.query.count);
else getCounter(res);
});
// placeholder : num
// any arg can place in num param
app.get('/set/:num', function(req, res){
if(req.params.num) setCounter(res, req.params.num);
else getCounter(res);
});

function setCounter(res, num){
console.log("...setCounter...");
Data.findOne({name:"myData"}, function(err, data){
if(err) return console.log("Data ERROR: ", err);
data.count=num;
data.save(function(err){
if(err) return console.log("Data ERROR: ", err);
res.render('firstPage', data);
});
});
}

function getCounter(res){
console.log("...getCounter...");
Data.findOne({name:"myData"}, function(err, data){
if(err) return console.log("Data ERROR", err);
res.render('firstPage', data);
});
}

如果我错了或者我的代码有错,请大家指教。提前致谢!

最佳答案

在进行任何操作之前,在该字段上设置一个默认值 0。出现此错误是因为没有为字段分配初始值。

关于node.js - 在服务器自身解决的路径错误中,为值 "NaN"转换为数字失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55680529/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com