NodeJS Update API - 内部服务器错误

时间:2016-12-28 03:23:17

标签: javascript node.js express ejs

现在是时候我打电话给大枪了,因为我似乎无法弄明白 我在Node中有一个简单的CRUD API。我在前端使用EJS。基本上,我有一个selectAllRecords视图,我在其中显示所有记录的表格。我在每条记录旁边都有一个按钮来编辑记录。单击该按钮后,它将重定向到editrecord.ejs页面,点击API以获取单个记录,其中每行显示为输入框中的值。从那里,我有一个带有XMLHttpRequest的onclick方法,它发出了一个put请求来更新数据库。但是,我收到了一个错误 - 500 (Internal Server Error) - 我确信这是一个相当简单的东西,我很想念,但我似乎无法弄明白。

非常感谢任何帮助!代码如下:

首先在我看来:

<script type="text/javascript">
function someFunc() {
    var id = <%= id %>;
    var url = '/api/edit/' + candID;
    console.log('url ' + url);
    var name = document.getElementById("name").value;
    var email = document.getElementById("email").value;

    var data = {
      name: name,
      email: email,
    }
    var json = JSON.stringify(data);
    console.log('json ' + json);
    var xhr = new XMLHttpRequest();
    xhr.open("PUT", url, true);
    xhr.setRequestHeader('Content-type', 'application/json; charset=utf-8');
    xhr.send(json);
};

并在我的queries.js文件中:

function updateCandidate(req, res, next) {
    var candID = parseInt(req.params.id);
    console.log('hit update');
    console.log('name ' + req.body.name);
    db.none('update cands set name=$1, email=$2 where id=$3',
    [req.body.name, req.body.email, candID])
    .then(function () {
      var candID = candID
      var name = data.name;
      var email = data.email;
      res.render("edited", {"candID":candID, "name":name, "email":email});
    })
    .catch(function (err) {
        return next(err);
    });
}

一个潜在的重要提示,当我点击更新按钮并执行someFunc()函数时,开发工具日志显示PUT请求为'api / edit / 50'(或任何ID)和'500(内部服务器错误) )' - 如果我很难重新加载'getAllRecords'视图,更新会反映出来,这是渲染或重定向的问题(我已尝试过)

修改

正如所建议的那样,我从updateCandidate方法中删除了渲染,但仍然遇到500内部服务器错误。 devtools告诉我PUT请求正在访问正确的URL,所以我真的不确定为什么这不正常。更新了以下代码...

function updateCandidate(req, res, next) {
var candID = parseInt(req.params.id);
db.none('update cands set name=$1, email=$2, client=$3, jobtitle=$4, question1=$5, question2=$6, question3=$7 where id=$8',
[req.body.name, req.body.email, req.body.client,
  req.body.jobtitle, req.body.question1, req.body.question2, req.body.question3, candID])
.then(function (data, err) {
  res.status(200)
    .json({
      status: 'success',
      message: `Edited Candidate`
    });
})
.catch(function (err) {
  return next(err);
});
}

2 个答案:

答案 0 :(得分:1)

您正在发送ajax请求以更新记录。因此,您不应该尝试// initialise the curl request $request = curl_init('http://www.example.com/connector.php'); // send a file curl_setopt($request, CURLOPT_POST, true); curl_setopt($request, CURLOPT_SAFE_UPLOAD, false); curl_setopt( $request, CURLOPT_POSTFIELDS, array( 'file' => '@' . realpath('logo.png') . ';filename=logo-test.png'. ';type=image/png' )); // output the response curl_setopt($request, CURLOPT_RETURNTRANSFER, true); if(curl_exec($request) === false) { echo 'Curl error: ' . curl_error($ch)."<br>"; } else { echo 'Operation completed without any errors<br>'; } // close the session curl_close($request); 视图或render用户作为此请求的响应。相反,您可以发回一个带有一些属性的JSON对象,例如: &#34;状态&#34;

然后在客户端,您检查返回的JSON响应并基于&#34; status&#34;您可以在客户端使用redirect更新数据或重新加载页面。

答案 1 :(得分:0)

您的数据库查询说

db.none('update cands set name=$1, email=$2 where id=$8', [req.body.name, req.body.email]) ...

不应该是

db.none('update cands set name=$1, email=$2 where id=$8', [req.body.name, req.body.email, candID])