mysql - 如何在 REST 服务器(NodeJS、MySQL)的 PUT 方法中传递正确的参数

标签 mysql node.js rest

我正在使用 RESTful 实现一个简单的高分板,服务器使用 NodeJS 和 MySQL。我在实现 PUT 方法时遇到问题,而其他方法(GET、POST、DELETE...)如我所料在客户端和 POSTMAN 中运行良好。

在 MySQL 中,我创建了一个表,其中只有 2 个值是“用户名”和“分数”。

这是我的路线代码:

'use strict';
module.exports = function(app) {
  let userCtrl = require('./controllers/UserControllers');

  // routes
  app.route('/users')
    .get(userCtrl.get)
    .post(userCtrl.store);

  app.route('/users/:username')
    .get(userCtrl.detail)
    .put(userCtrl.update)
    .delete(userCtrl.delete);

  app.route('/leaderboard')
    .get(userCtrl.top);
};

这是我的 Controller 源代码:

'use strict';

const util = require('util');
const mysql = require('mysql');
const db = require('./../db.js');

module.exports = {
  get: (req, res) => {
    let sql = 'SELECT * FROM leaderboard';
    db.query(sql, (err, response) => {
      if (err) throw err;
      res.json(response);
    });
  },
  store: (req, res) => {
    let sql = 'INSERT INTO leaderboard SET ? ';
    // sql = 'INSERT INTO leaderboard_log SET '
    let data = req.body;
    db.query(sql, [data], (err, response) => {
      if (err) throw err;
      res.json({message: 'Insert success!'});
    });
  },
  // the 'update' here works well in POSTMAN
  update: (req, res) => {
    let sql = 'UPDATE leaderboard SET ? WHERE username = ?';
    let data = req.body;
    let username = req.params.username;
    db.query(sql, [data, username], (err, response) => {
      if (err) throw err;
      res.json({message: 'Update success!'});
    });
  }
};

javascript中的客户端使用PUT方法

function httpPut(theUrl, data, callbackSuccess, callbackError) {
  $.ajax({
    type: "PUT",
    url: theUrl,
    success: callbackSuccess,
    error: callbackError,
    dataType: "json",
    crossDomain: true
  });
}

// how to pass the params 'username, 'newScore' to httpPUT ?!?
function updateUser(username, newScore) {
  let data = {};
  data['username'] = username;
  data['score'] = newScore;
  httpPut(URL_PUT_USER + username, data, function(data) {
    // success
    console.log("success update");
  }, function(data) {
    // fail
    console.log("update error");
  });
}

问题是函数

updateUser(username, newScore)

我不知道如何传递参数以便update: (req, res) 能够理解。

请注意,我测试过使用 POSTMAN 更新记录,update: (req, res) 运行良好。

感谢任何帮助。谢谢!

PS:这是服务器上的错误:

simple_leaderboard\node_modules\mysql\lib\protocol\Parser.js:80
  throw err; // Rethrow non-MySQL errors
  ^

最佳答案

PUT 映射到 store 操作,其中您的 sql 定义为:

let sql = 'INSERT INTO leaderboard SET ? ';

这不是有效的 SQL 插入语句。

你可能想要:

let sql = 'INSERT INTO leaderboard(username, data) VALUES(?, ?)';
let username = req.params.username;
let data = req.body;
db.query(sql, [username, data], ...

关于mysql - 如何在 REST 服务器(NodeJS、MySQL)的 PUT 方法中传递正确的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54508802/

相关文章:

php - Laravel Eloquent Join vs Inner Join?

node.js - 如何从文本文件中的 node.js 中的特定行位置删除行

javascript - 一个变量没有定义,但我之前初始化了它

rest - 使用 postman 访问 jhipster 演示应用程序

PHP SQL查询结果

php - 为 HTML 输入字段格式化 MySQL 查询

php - MySQL中 'updating'行的正确方法

scheduling - 是否有 node.js 的作业调度程序库?

rest - Orientdb REST API 仅返回 20 条记录

spring - 是否可以将 Spring Data Rest 配置为使用 id 作为引用而不是 URI?