【问题标题】:Node.js POST returns, cannot post to Database tableNode.js POST 返回,无法发布到数据库表
【发布时间】:2020-07-26 06:36:54
【问题描述】:

我刚刚在 Node.js 中启动后端 现在我想在 Node.js 中编写一个 REST api,它应该将数据发送到 Mysql 数据库。 GET 请求显然工作正常,因此 GET 请求没有任何问题,只有 POST,它不会将信息保存到数据库中。

我的代码是这样的

app.post('/users/', function(req,res){
let sql ="insert into personal_info (name, email, gender, national_id,salary) values (?)";
let values = [req.body.name, req.body.email, req.body.gender,req.body.national_id,req.body.salary];
db.query(sql, [values], function(err, data, fields){

      if (err) throw err;
      res.json({
        status: 200,
        message: "New user added successfully"
      })
    });
});

在 POSTman 中运行它,我得到了这个:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="utf-8">
    <title>Error</title>
</head>

<body>
    <pre>Cannot POST /users</pre>
</body>

</html>

我似乎缺少什么东西吗?就像我说的,我对此很陌生,我确实需要某种形式的澄清。

编辑

代码现在看起来像这样:

app.post('/api/user/', function(req,res){
  let sql ="insert into personal_info (name, email, gender, national_id,salary) values (?,?,?,?,?)";
  let values = [req.body.name, req.body.email, req.body.gender,req.body.national_id,req.body.salary];
  dbcon.query(sql, [values], function(err, data, fields){
  
        if (err) throw err;
        res.json({
          status: 200,
          message: "New user added successfully"
        })
      });
  });

这是错误

D:\Node_JSREST\nodejsrest_example>node index.js
Node app is on port 5900
D:\Node_JSREST\nodejsrest_example\node_modules\mysql\lib\protocol\Parser.js:437
      throw err; // Rethrow non-MySQL errors
      ^

Error: ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '?,?,?,?)' at line 1
    at Query.Sequence._packetToError (D:\Node_JSREST\nodejsrest_example\node_modules\mysql\lib\protocol\sequences\Sequence.js:47:14)
    at Query.ErrorPacket (D:\Node_JSREST\nodejsrest_example\node_modules\mysql\lib\protocol\sequences\Query.js:79:18)
    at Protocol._parsePacket (D:\Node_JSREST\nodejsrest_example\node_modules\mysql\lib\protocol\Protocol.js:291:23)
    at Parser._parsePacket (D:\Node_JSREST\nodejsrest_example\node_modules\mysql\lib\protocol\Parser.js:433:10)
    at Parser.write (D:\Node_JSREST\nodejsrest_example\node_modules\mysql\lib\protocol\Parser.js:43:10)
    at Protocol.write (D:\Node_JSREST\nodejsrest_example\node_modules\mysql\lib\protocol\Protocol.js:38:16)
    at Socket.<anonymous> (D:\Node_JSREST\nodejsrest_example\node_modules\mysql\lib\Connection.js:88:28)
    at Socket.<anonymous> (D:\Node_JSREST\nodejsrest_example\node_modules\mysql\lib\Connection.js:526:10)
    at Socket.emit (events.js:189:13)
    at addChunk (_stream_readable.js:284:12)
    --------------------
    at Protocol._enqueue (D:\Node_JSREST\nodejsrest_example\node_modules\mysql\lib\protocol\Protocol.js:144:48)
    at Connection.query (D:\Node_JSREST\nodejsrest_example\node_modules\mysql\lib\Connection.js:198:25)
    at D:\Node_JSREST\nodejsrest_example\index.js:42:9
    at Layer.handle [as handle_request] (D:\Node_JSREST\nodejsrest_example\node_modules\express\lib\router\layer.js:95:5)
    at next (D:\Node_JSREST\nodejsrest_example\node_modules\express\lib\router\route.js:137:13)
    at Route.dispatch (D:\Node_JSREST\nodejsrest_example\node_modules\express\lib\router\route.js:112:3)
    at Layer.handle [as handle_request] (D:\Node_JSREST\nodejsrest_example\node_modules\express\lib\router\layer.js:95:5)
    at D:\Node_JSREST\nodejsrest_example\node_modules\express\lib\router\index.js:281:22
    at Function.process_params (D:\Node_JSREST\nodejsrest_example\node_modules\express\lib\router\index.js:335:12)
    at next (D:\Node_JSREST\nodejsrest_example\node_modules\express\lib\router\index.js:275:10)

D:\Node_JSREST\nodejsrest_example>

再次编辑

var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var mysql = require('mysql');

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended:true}));

app.get('/',function(req,res){
    return res.send({error:true, message : 'hello world'});
});

var dbcon = mysql.createConnection({host:'localhost',user:'root',password:'',database:'staffdb' });
dbcon.connect();

app.get('/users',function(req,res){
dbcon.query('select * from personal_info', function (error, results, fields){
    if (error) throw error;
        return res.send({ error: false, data: results, message: 'users list.' });
    });

});

app.get('/users/:id',function (req, res){

    let user_id = req.params.id;
    if (!user_id) {
        return res.status(400).send({ error: true, message: 'Please provide user_id' });
    }

    dbcon.query('select * from personal_info where id=?',user_id,function(error, results,fields){
        if (error) throw error;
        return res.send({ error: false, data: results[0], message: 'users list.' });
    });
});



app.post('/api/user/', function(req,res){
  let sql ="insert into personal_info (name, email, gender, national_id,salary) values (?)";
  let values = [req.body.name, req.body.email, req.body.gender,req.body.national_id,req.body.salary];
  dbcon.query(sql, [values], function(err, data, fields){
  
        if (error) throw error;
        res.json({
          status: 200,
          message: "New user added successfully"
        })
      });
  });


app.listen(5900,function(){
    console.log('Node app is on port 5900');
});

module.exports = app;

【问题讨论】:

  • 这能回答你的问题吗? Cannot POST / error using express
  • @GirkovArpa,不,不是
  • 你能显示你所有的express代码吗?
  • OK Lemme 显示编辑
  • @GirkovArpa,我已将完整代码放入您的视图的新编辑中

标签: javascript mysql node.js rest


【解决方案1】:

我认为您为数据库引擎使用了错误的节点模块。在这里你导入mysql:

var mysql = require('mysql');

但在错误中我们可以看到您对 ma​​riaDB 服务器有错误:

Error: ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '?,?,?,?)' at line 1

我建议您尝试使用mariadb 节点模块。这是来自mariadb.com 的示例。 README也不错。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-20
    • 2019-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 2023-03-20
    相关资源
    最近更新 更多