javascript - 'temp' 中的未知列 'field list'

标签 javascript mysql node.js ejs gpio

我想寻求有关温度 REST API 的帮助。我两周前刚刚启动了 node.js,并设法创建了一个基本的 REST API,并获取了 DS18B20 温度传感器 ID 和读数。能够完美工作,没有任何错误或问题,但是当我开始实现将 mySQL 数据库存储到我的 index.js 中并执行 app.js 的功能时,我遇到了错误,我现在迷失了。

希望你们能尽快帮我解决这个问题,先谢谢你们了。

这是我的 app.js:

var express = require('express');
var path = require('path');
var favicon = require('static-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var index = require('./routes/index');
var app = express();

// View engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.set('port', process.env.PORT || 3000);

app.use(favicon());
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded());
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', index);

// Catch 404 and forward to error handler
app.use(function(req, res, next) {
    var err = new Error('Not Found');
    err.status = 404;
    next(err);
});

// error handlers

// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
    app.use(function(err, req, res, next) {
        res.status(err.status || 500);
        res.render('error', {
            message: err.message,
            error: err
        });
    });
}

// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
    res.status(err.status || 500);
    res.render('error', {
        message: err.message,
        error: {}
    });
});

module.exports = app;
var server = app.listen(app.get('port'), function() {
  console.log('Listening on port %d', server.address().port);
});

这是我的/routes/index.js:

var express = require('express');
var router = express.Router();
var mysql = require('mysql');
var gpio = require('pi-gpio');
var sensor = require('ds18b20');

var conn = {
    host: 'localhost',
    user: 'user',
    password: 'password',
    database: 'rest_api',
    port: '3306'
};

router.get('/', function(req, res) {
    var pin = req.params.pin;
    var connection = mysql.createConnection(conn);

    //Get ID and Reading from DS18B20 Temperature Sensor 
    sensor.getAll(function (err, tempObj) {
        console.log(tempObj);
    });

    //Store to mySQL database
    sensor.get('10-000802be4633', function (err, temp) {
        connection.query('INSERT INTO sensorLog(sensorId, logTime, sensorValue) VALUES(4, current_timestamp(), temp)', function(err) {
            if (err) {
                throw err;
            } else {
                console.log("Successfully store to mySQL database");
            }
        });
});

});

module.exports = router;

这是我的/views/index.ejs:

<!DOCTYPE html>
<html>
  <head>
    <title><%= title %></title>
    <link rel='stylesheet' href='/stylesheets/style.css' />
  </head>
  <body>
  </body>
</html>

这是我的错误消息:

/var/www/node_modules/mysql/lib/protocol/Parser.js:82
        throw err;
              ^
Error: ER_BAD_FIELD_ERROR: Unknown column 'temp' in 'field list'
at Query.Sequence._packetToError (/var/www/node_modules/mysql/lib/protocol/s                                                                                                                                                             equences/Sequence.js:48:14)
at Query.ErrorPacket (/var/www/node_modules/mysql/lib/protocol/sequences/Que                                                                                                                                                             ry.js:82:18)
at Protocol._parsePacket (/var/www/node_modules/mysql/lib/protocol/Protocol.                                                                                                                                                          js:251:24)
at Parser.write (/var/www/node_modules/mysql/lib/protocol/Parser.js:77:12)
at Protocol.write (/var/www/node_modules/mysql/lib/protocol/Protocol.js:39:1                                                                                                                                                             6)
at Socket.<anonymous> (/var/www/node_modules/mysql/lib/Connection.js:82:28)
at Socket.emit (events.js:95:17)
at Socket.<anonymous> (_stream_readable.js:748:14)
at Socket.emit (events.js:92:17)
at emitReadable_ (_stream_readable.js:410:10)
    --------------------
at Protocol._enqueue (/var/www/node_modules/mysql/lib/protocol/Protocol.js:1                                                                                                                                                             35:48)
at Connection.query (/var/www/node_modules/mysql/lib/Connection.js:184:25)
at /var/www/routes/index.js:38:15
at /var/www/node_modules/ds18x20/lib/ds18x20.js:47:20
at /var/www/node_modules/ds18x20/node_modules/async/lib/async.js:232:13
at /var/www/node_modules/ds18x20/node_modules/async/lib/async.js:119:25
at /var/www/node_modules/ds18x20/node_modules/async/lib/async.js:24:16
at /var/www/node_modules/ds18x20/node_modules/async/lib/async.js:229:17
    at /var/www/node_modules/ds18x20/lib/ds18x20.js:42:24
    at /var/www/node_modules/ds18x20/lib/reader.js:29:10

最佳答案

我相信您使用完引脚后需要gpio.close(...)

例如

router.get('/:pin/1', function(req, res) {
    // ...
    gpio.open(pin, 'output', function(err) {
        // ...
        gpio.close(pin, function(err) {
            // done
        });
    });
});

否则,PIN 码可能仍因之前的请求而处于打开状态。

编辑:

此外,您需要在 SQL 查询中使用变量 temp 的值,而不是字面上的 temp。现在,您的查询看起来像这样:

INSERT INTO sensorLog (sensorId, logTime, sensorValue)
   VALUES (4, current_timestamp(), temp)

您实际需要使用的是:

INSERT INTO sensorLog (sensorId, logTime, sensorValue)
   VALUES (4, current_timestamp(), 0)

也就是说,SQL 查询需要包含一个数字。数据库不知道 temp 的含义;它认为您引用的是一个列,但没有具有该名称的列。

您需要更改查询以使用 temp 的实际值,如下所示:

connection.query('INSERT INTO sensorLog (sensorId, logTime, sensorValue) '
   + 'VALUES (4, current_timestamp(), ' + temp + ')', function(err) {

   // function body
});

关于javascript - 'temp' 中的未知列 'field list',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25173289/

相关文章:

javascript - 创建具有随机 0 和 1 值的矩阵的代码

javascript - 刷新 directions_changed 上的航路点

javascript - 为什么我的数组排序无序?

MySQL : Cannot add or update a child row: a foreign key constraint fails

javascript - Node js 中的 date() 函数是提供服务器端日期还是客户端日期?

javascript - 如何告诉 Express 不要解析请求的查询字符串?

javascript - NodeJS 的 AJAX Helper,而不是 jQuery?

PHP while循环从数据库获取发布数据

javascript - 用于 JavaScript 服务器开发的最佳 IDE

mysql - 在mysql中,我可以计算有多少行满足某个条件,如果不满足则退出计数吗?