【问题标题】:TypeError: Cannot read property 'id' of undefined in nodejsTypeError:无法读取nodejs中未定义的属性'id'
【发布时间】:2023-03-19 10:00:01
【问题描述】:

我正在努力制作一个函数,该函数根据在文本框中输入的 id 从数据库中进行选择。我写了代码,但它在控制台中显示了这个错误,我不知道为什么:TypeError: Cannot read property 'id' of undefined。

到目前为止我的代码:

客户端:

function select()
            {
                var id = $('#nr_reg').val();
                $.ajax({
                    type: 'post',
                    url: '/id',
                    data : {
                        id: id
                    },
                    succes: function(data){
                        var id = data.id;
                        alert(id);
                        $('#optic').val(id);
                    },
                    error: function(err){
                        console.log(err);
                    }

                }); 
            }

服务器端:

app.post('/id', function(req,res) {

    var data = req.body;
    var id = data.id;
    console.log(id);
    var query = "SELECT * FROM Control WHERE id=" +id;
    connection.query(query, function(error, result) {
            console.log(result);
            res.send(result);
    });
});

L.E: 功能选择:

function select()
            {

                var id = $('#nr_reg').val();
                $.ajax({
                    type: 'post',
                    dataType: 'json',
                    url: '/id',
                    data : {
                        id: id
                    },
                    success: function(data){    
                        data = JSON.parse(data);                    
                        var id = data.id;
                        alert("merge");
                        $('#optic').val(id);
                    },
                    error: function(err){
                        console.log(err);
                    }

                }); 
            }

【问题讨论】:

  • 在success 中添加console.log(data),看看你在控制台得到了什么
  • 没有输入succes,因为错误在服务器端。
  • 那么,您使用的是正文解析器中间件吗? ,否则你永远不会在 express 上得到 req.body。
  • 您使用的是哪个快递版本?
  • 是的,我是@GonzaloBahamedez。 TTushar- 它在控制台中显示未定义。仅此而已。

标签: javascript jquery node.js


【解决方案1】:

确保您拥有required body-parser。 并使用bodyParser.urlencoded。

var bodyParser = require('body-parser');

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

这应该在您的 .post 路由定义之前。

编辑:

在这一切之前,你必须做到npm install body-parser :)

【讨论】:

  • 好的。这样就可以了。它正确获取 id,正确显示结果,但仍未在客户端输入 succes。为什么现在这样了?
  • 它没有显示错误。在控制台中仅显示 id 和结果。但是在客户端我有一个带有 id 的警报,它现在显示并且仍然没有根据选择的内容设置文本框的值。为什么?
  • @Ezekiel mmm 在您的客户端代码中,您的“成功”应该是“成功”,我认为没有?
  • @Ezekiel : 你能把data 的值粘贴到你的success 回调中吗?
  • 您可能必须在成功回调中首先执行data = JSON.parse(data);。您尚未在 ajax 调用中设置 dataType 属性。
【解决方案2】:

你说你的错误是在服务器端?将正文解析器添加到您的 express 应用中:

第一次安装正文解析器:

npm install body-parser -s

在你的应用中包含这个:

var express = require('express');
var bodyParser = require('body-parser');
app.use(bodyParser.json());
app.post(/*....*/);

您的app.post 必须在app.use 行之后。
完整示例here
顺便说一句,这是this

的副本

【讨论】:

  • express 4 或最新版本怎么样?在快递 4 中没有“express.bodyParser”
  • 还是一样,还是要注册中间件来解析请求体:expressjs.com/4x/api.html#req.body
  • Most middleware (like bodyParser) is no longer bundled with Express and must be installed separately 。为什么?我有快递..
  • 至于express 4+ body-parser是一个单独的模块。
  • @DanielGruszczyk :O 不是真的,你需要 bodyParser 模块 .... express 没有内置 bodyParser,看看你发给我的链接
猜你喜欢
  • 2017-03-06
  • 1970-01-01
  • 2022-09-23
  • 2022-11-29
  • 2017-08-30
  • 2017-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多