MongoDB 省一正一错

MongoDB saving one correct one wrong

这是我使用这些技术的第一个项目,英语不是我的母语,请原谅我的所有错误。

我正在制作 Real-time Arduino NodeJS MongoDB 项目。我的主要目标是从 arduino 获取湿度、温度和气体值。将它们存储在 Mongodb 中并在网站(目前为本地主机)上发布这些值。这是我的 NodeJS 文件。几个变量是土耳其语,但我认为它并不那么重要。

// Express bir server kurduk
var express = require('express');
var app = express();
var server = require('http').createServer(app);
var io = require('socket.io')(server);
var port = process.env.PORT || 8000;
// 8000. Porttan bağlantıyı sağlıyoruz
// mongoose kullandığımız veri tabanı kısmımız
var mongoose = require('mongoose');
var promise = mongoose.connect('mongodb://localhost/deneme2', {
  useMongoClient: true,

});
promise.then(function(db) {
console.log('database e baglanildi')

});

// mongoose şeması tanımlaması
var Schema = mongoose.Schema;

var Veri = new Schema({
    nem:  String,
    sicaklik: String,
    sicaklik2: String,
    sicaklik3: String,
    gas: String,
    body:   String,
    date: { type: Date,default: Date.now }});
var Veriler = mongoose.model('veri', Veri);

// server dinleniyor fonksiyonu
server.listen(port, function () {
    console.log('Server listening at port %d', port);
});

// yönlendirme

app.use(express.static(__dirname + '/public'));

var SerialPort = require("serialport").SerialPort
var serialPort = new SerialPort("/dev/ttyACM0", { //Arduino bağlantısını sağladığımız USB portumuz
    autoOpen: false,
    parser: SerialPort.parsers.readline('\r\n'),
    baudrate:115200 // bitrate'imiz
}); 
//serialporttan okuyan ve datayı ekranımıza yazan fonksiyon
serialPort.open(function () {
    console.log('NodeJS Arduino Projemiz Hazır');
    serialPort.on('data', function(data) {
        console.log(data);
        io.sockets.emit('message', data.toString());
        var test=data.toString();
        var temp=test.split(",");
        var veritabani=new Veriler({
          nem: temp[0],
          sicaklik: temp[1],
          sicaklik2: temp[2],
          sicaklik3: temp[3],
          gas: temp[4]
        }); 
        veritabani.save(function(err){
         if(err) throw err
        });
});   

   }); 


app.get('/', function (req, res) {
    res.sendFile(__dirname + '/index.html');
});

io.on('connection', function (socket) {

});

一切都很好。我是这样从 Arduino 获取数据的 31.0,24.0,297.0,185 我正在将它保存到数据库,但这是第一个 object 这是错误的

{
    "_id" : ObjectId("5a5285dd36e0c007967c3f66"),
    "nem" : "",
    "date" : ISODate("2018-01-07T20:41:01.168Z"),
    "__v" : 0
}

这是第二个 object 是正确的。

{
    "_id" : ObjectId("5a5285dd36e0c007967c3f67"),
    "nem" : "32.0",
    "sicaklik" : "24.0",
    "sicaklik2" : "297.0",
    "sicaklik3" : "56.0",
    "gas" : "228",
    "date" : ISODate("2018-01-07T20:41:01.193Z"),
    "__v" : 0
}

就这样一改一改。我正在使用 800 毫秒延迟,但我将尝试更改延迟。我不知道是什么问题。还有我的 html 文件:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>Ev Otomasyonu</title>
    <script src="/socket.io/socket.io.js"></script>
    <script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
    <script src="//code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
    <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css">
    <script>
        var socket = io.connect('http://localhost');
        socket.on('message',function(data){
            test=data.toString(); 
            temp=test.split(',');
            $('#nem').temp[0];
            $('#sicaklik').text(temp[1]);
            $('#sicaklik2').text(temp[2]);
            $('#sicaklik3').text(temp[3]);
            $('#gas').text(temp[4]);
        });
    </script>
</head>
<body>
<div>
    <h1>Nem</h1>
    <h1 id='nem'></h1>
</div>

<div>
    <h1>Celcius</h1>
    <h1 id='sicaklik'></h1>
</div>
<div>
    <h1>Fahrenheit</h1>
    <h1 id='sicaklik2'></h1>
</div>
<div>
    <h1>Kelvin</h1>
    <h1 id='sicaklik3'></h1>
</div>
<div>
    <h1>Gaz</h1>
    <h1 id='gas'></h1>
</div>

</body>
</html>

这并没有给我写 headers 的值。我认为这是因为之前保存的数据库中的第一个 object。

根据 serialport package 中的示例代码,您正在使用可能引入此类行为的 'flowing mode' 收听。您是否尝试过使用非流动模式?

查看示例代码:

// Switches the port into "flowing mode"
port.on('data', function (data) {
  console.log('Data:', data);
});

// Read data that is available but keep the stream from entering "flowing mode"
port.on('readable', function () {
  console.log('Data:', port.read());
});