【问题标题】:NodeJS with mongoDB JSONFormat issue带有 mongoDB JSONFormat 问题的 NodeJS
【发布时间】:2017-07-24 13:34:54
【问题描述】:

我是 NodeJS 和 MongoDb 的新手。我在 jsonObject 上遇到问题。

第 1 步:我已经在我的 ubuntu 16.04 系统中成功安装了 NodeJS 和 MongoDB。

第 2 步:我在项目文件夹中使用 package.json 文件创建了所有服务器设置。

第 3 步:我创建了 server.js 文件,如下所示。

server.js 文件

    express = require('express'),
    routes = require('./api/routes/todoListRoutes');
    mongoose = require('mongoose'),
    Task = require('./api/models/todoListModels'),
    bodyParser = require('body-parser');
    app = express(),
    port = process.env.PORT || 3000,
    mongoose.Promise = global.Promise;
    mongoose.connect('mongodb://localhost/Tododb');
    app.use(bodyParser.urlencoded({ extended: true }));
    app.use(bodyParser.json());
    routes(app);
    app.listen(port);
    console.log('todo list RESTful API server started on: ' + port);

然后我创建了模型文件来存储记录。

todoListModels.js

    'use strict';
    var mongoose = require('mongoose');
    var Schema = mongoose.Schema;


    var TaskSchema = new Schema({
      name: {
        type: String,
        Required: 'Kindly enter the name of the task'
      },
      Created_date: {
        type: Date,
        default: Date.now
      },
      status: {
        type: [{
          type: String,
          enum: ['pending', 'ongoing', 'completed']
        }],
        default: ['pending']
      }
    },{ versionKey: false }//Updated);

    module.exports = mongoose.model('Tasks', TaskSchema);

todoListRoutes.js

'use strict';
module.exports = function(app) {
  var todoList = require('../controllers/todoListController');
  app.route('/tasks').get(todoList.list_all_tasks).post(todoList.create_a_task);
  app.route('/tasks/:taskId').get(todoList.read_a_task).put(todoList.update_a_task).delete(todoList.delete_a_task);
};

todoListController.js

'use strict';


mongoose = require('mongoose'),
Task = mongoose.model('Tasks');

exports.list_all_tasks = function(req, res) {
  Task.find({}, function(err, task) {
    if (err)
      res.send(err);
    res.json(task);
  });
};

exports.create_a_task = function(req, res) {
  var new_task = new Task(req.body);
  new_task.save(function(err, task) {
    if (err)
      res.send(err);
    res.json(task);
  });
};


exports.read_a_task = function(req, res) {
  Task.findById(req.params.taskId, function(err, task) {
    if (err)
      res.send(err);
    res.json(task);
  });
};


exports.update_a_task = function(req, res) {
  Task.findOneAndUpdate(req.params.taskId, req.body, {new: true}, function(err, task) {
    if (err)
      res.send(err);
    res.json(task);
  });
};


exports.delete_a_task = function(req, res) {
  Task.remove({
    _id: req.params.taskId
  }, function(err, task) {
    if (err)
      res.send(err);
    res.json({ message: 'Task successfully deleted' });
  });
};

然后我通过 nodemon server.js 运行节点服务器 服务器成功运行。 然后,我尝试使用 POST MAN 应用程序从数据库中获取数据。

所以,我确实喜欢下面,

GET方法:localhost:3000/tasks

它成功运行并产生了结果。

如下图,

[
  {
  "_id": "58ba4c9c03e10b16d140775f",
   "name": "Karthik",
   "__v": 0,
   "status": [
   "pending"
  ],
  "Created_date": "2017-03-04T05:11:56.590Z"
}]

我的问题在这里,

1) 我没有在这里创建 __vid 字段。那它为什么会来? 2)然后我需要在 Created_date 字段中使用正确的日期格式。比如“dd-MM-yyyy hh:mm”。怎么做?

我们将不胜感激。谢谢。

更新

当我尝试安装时刻时,出现以下错误

notsup 跳过可选依赖:fsevents@1.1.1 不受支持的平台:想要 {"os":"darwin","arch":"any"}(当前:{"os":"linux","arch" :"x64"})

【问题讨论】:

    标签: json node.js mongodb mongoose


    【解决方案1】:
    1.  "_id": "58ba4c9c03e10b16d140775f"
    

    这是默认情况下 mongodb 为您插入的每个文档创建的唯一 id,mongo 将创建一个默认设置为索引键的 _id。

    更多参考可以阅读advantage of _id

    2."__v": 0
    

    versionKey 是 Mongoose 首次创建每个文档时设置的属性。此键值包含文档的内部修订。 versionKey 选项是一个字符串,表示用于版本控制的路径。

    open this for more details

    3."Created_date": "2017-03-04T05:11:56.590Z"
    

    是mongodb保存日期的默认格式。mongodb使用ISO格式来存储日期。如果您想以这种方式保存它,您可以将日期存储为字符串格式,或者您可以保存为 ISO 格式,但是当您获取文档时,您可以使用 Moment 等模块以您想要的格式显示日期。

    【讨论】:

    • 如何从json中去掉__v?如何设置我的正确日期?
    • 您可以在插入数据时添加执行此操作。新架构({..},{ skipVersioning:{ dontVersionMe:true } }); thing.dontVersionMe.push('嘿');东西.save(); // 版本不递增
    • 或者如果你不想在使用检索数据时获取它,你可以使用这个 Models.facilities.find(criteria, {__v:0}, options, callback);在投影中传递 __v:0。
    • 暂时未在 ubuntu 16.04 上安装。
    • 是的,你也需要关闭方括号。并且您可以安装 npm 模块。
    猜你喜欢
    • 2018-12-08
    • 2022-08-16
    • 1970-01-01
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-27
    相关资源
    最近更新 更多