【问题标题】:Cannot insert data from frontend Javascript to database using Mongoose无法使用 Mongoose 将数据从前端 Javascript 插入数据库
【发布时间】:2017-05-26 16:34:25
【问题描述】:

我正在开发一个 Node.js-Express.js-Mongoose 应用程序。 我想以 html 表单(EJS 文件)接受用户详细信息(姓名和年龄),保存到数据库中(使用猫鼬)在网页上显示添加的用户详细信息。 我正在使用 AJAX。使用的文件是:

userview.ejs(包含表单)--> frontend.js(使用 jquery)--> users.js(路由器file- 调用 userController 中定义的 add() 函数)--> userController.js(附在下面)--> userService.js(执行数据库操作)。

检查列表应该是什么样子的图像。

实际发生的情况是创建了一个新用户,但没有显示名称。

查看数据库显示仅添加了空白条目的 ID。

FRONTEND.js

console.log('Frontend Reached');

$(document).ready(function() {

  var url = '/users/delete_user';
  var user_url = '/users/add_user';


  function load_users(e) {
    $.ajax({
      url: 'userview.ejs',
      dataType: 'text',
      type: 'post',
      ContentType: 'html',
      data: $('#user_form').serialize(), 
      success: function(data, textStatus, jQxhr) {
        console.log(data);
        $('#list').html(data);
        //$('#user_form').submit( load_users );
      },
      error: function(jqXhr, textStatus, errorThrown) {
        console.log(errorThrown);
      }
    });

    e.preventDefault();
  }

//添加用户

  $(document).on('click', '.btn btn-success', function(e) {
    e.preventDefault();
    var user_name = $("#nameinput").val();
    var user_age = $("#ageinput").val();
    console.log(user_name);
    console.log(user_age);

    $.ajax({
      url: 'userview.ejs',
      dataType: 'text',
      type: 'post',
      ContentType: 'html',
      data: {
        'user_name': user_name,
        'user_age': user_age
      },
      success: function(data, textStatus, jQxhr) {
        console.log(data);
        load_users();
      },
      error: function(jqXhr, textStatus, errorThrown) {
        console.log(errorThrown);
      }
    });

    e.preventDefault();


  }); //onclick



}); //document ready

这是 userController.js 此文件中的控制台日志显示该记录未定义。

var User = require('../models/usermodel.js');
var userService = require('../services/userService');

var userController = {
  add: function(request, response) {
    var user_name = request.body.user_name;
    var user_age = request.body.user_age;
    console.log(user_name);   //SHOWS UNdEFINED
    var newUser = new User({
      name: user_name,
      age: user_age
    });
    console.log(newUser);
    //var userName = request.body.user_name;
    //var userAge = request.body.user_age;
    userService.add(newUser, function(err, added) {
      if (err != null) {
        response.send(500);
      } else {
        response.send(200);
      }
    });
  },

  delete: function(request, response) {

    var userId = request.body.user_id;
    userService.delete(userId, function(err, deleted) {
      if (err != null) {
        response.send(500);
      } else {
        response.send(200);
      }
    });
  }
};

module.exports = userController;

【问题讨论】:

  • 什么错误?问题是什么?应该发生什么?实际发生了什么?这就是提出问题的原因,而您的问题则缺乏。请参阅mcve 以改进您的问题。
  • 您是否尝试将数据直接从前端添加到 mongodb?我找不到原因,先生!您需要拥有开放(非安全)数据库或在前端存储凭据(这意味着几乎开放的数据库,因为您无法在前端隐藏任何内容)。这是不行的。
  • @NeilLunn 我已经进行了必要的更改。如果您还需要什么,请告诉我。
  • 可能问题出在您设置的dataTypeContentType 上。删除它们以保留默认值或更改为 contentType: "application/json; charset=utf-8"dataType: "json"

标签: javascript jquery node.js mongodb mongoose


【解决方案1】:

使用 JSON.stringify() 发送您的数据, 并将内容类型指定为 'application/json',以便您的服务器知道期待 JSON。

var data = {
    'user_name': user_name,
    'user_age': user_age
  },

$.ajax({
  url: 'userview.ejs',
  type: 'post',
  contentType: 'application/json',
  data: JSON.stringify(data), 
  success: function(data, textStatus, jQxhr) {
    console.log(data);
    load_users();
  },
  error: function(jqXhr, textStatus, errorThrown) {
    console.log(errorThrown);
  }
});

【讨论】:

  • 同样的问题仍然存在。我收到弃用警告和以下错误:在 controllers\userController.js:21:34 处使用 res.sendStatus(status) 用户已创建! POST /users/add_user 200 14149.870 毫秒 - 2
  • 你还有这个问题吗? @ArjunJain
猜你喜欢
  • 1970-01-01
  • 2012-05-26
  • 1970-01-01
  • 2013-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多