restapi:使用expressjs向mysql数据库插入值

h4cxqtbf  于 2021-06-23  发布在  Mysql
关注(0)|答案(2)|浏览(298)

我有一个在expressjs上运行的mysql数据库的简单api。

const express = require('express');
const router = express.Router();

const app = express();
const port = process.env.PORT || 5000;

app.listen(port, () => console.log(`Listening on port ${port}`));

var mysql = require('mysql')
var connection = mysql.createConnection({
  host: 'localhost',
  user: 'andri',
  password: '12345',
  database: 'andri'
});

app.get('/employees', function (req, res) {
  console.log(req);
  connection.query('select * from users', function (error, results, fields) {
    if (error) throw error;
    res.end(JSON.stringify(results));
  });
});

app.get('/employees/:id', function (req, res) {
  connection.query('select * from users where id=?', [req.params.id], function (error, results, fields) {
    if (error) throw error;
    res.end(JSON.stringify(results));
  });
});

app.post('/employees', function (req, res) {
  var postData = req.body;
  connection.query("INSERT INTO users (`id`, `userid`, `fullname`, `usergroup`, `emailid`, `mobile`, `title`, `created_at`) VALUES (NULL, '?', '?', '?', '?', '?', '?', CURRENT_TIMESTAMP);", 
  postData, function (error, results, fields) {
    if (error) throw error;
    res.end(JSON.stringify(results));
  });
});

我可以使用postman测试函数(employees/和employees/:id)的端点是否正常工作。但是post函数

{
    "userid": "PROJ-12345",
    "fullname": "Eko Andri S",
    "usergroup": "IT",
    "emailid": "eko.andri@xxx.or.id",
    "mobile": "0811111111",
    "title": "Intern",
    "created_at": "2018-05-30T01:59:17.000Z"
}

在波特斯曼身上得到这个结果:

{
    "fieldCount": 0,
    "affectedRows": 1,
    "insertId": 8,
    "serverStatus": 2,
    "warningCount": 0,
    "message": "",
    "protocol41": true,
    "changedRows": 0
}

以上记录在数据库中记录成功,但每个字段的值为“?”,没有引号;除了正确记录的时间戳。
如果我删除报价?在insert行中,我得到以下错误
您的sql语法有错误

yxyvkwin

yxyvkwin1#

似乎缺少了主体解析器部分,它解析使用httppost请求提交的json、缓冲区、字符串和url编码的数据。你可以在这里找到更多关于主体解析器的信息
在代码中添加以下行,并确保已安装body解析器。

var bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

然后在你的 app.post 零件

app.post('/employees', function (req, res) {
  var postData = req.body;
  postData.created_at = new Date();
  connection.query("INSERT INTO users SET ?",
  postData, function (error, results, fields) {
    if (error) throw error;
    console.log(results.insertId); // Auto increment id
    res.end(JSON.stringify(results));
  });
});

希望能成功。

csga3l58

csga3l582#

因为问号(?)用单引号括起来,所以它被认为是一个字符串,这就是为什么问号(?)存储在数据库中。通过插入具有自动递增主键的行来检查以下方法。

app.post('/employees', function (req, res) {
  var postData = req.body;
  connection.query("INSERT INTO users SET ?", 
  postData, function (error, results, fields) {
    if (error) throw error;
    console.log(results.insertId); // Auto increment id
    res.end(JSON.stringify(results));
  });
});

相关问题