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());
});
这是我使用这些技术的第一个项目,英语不是我的母语,请原谅我的所有错误。
我正在制作 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());
});