日期:2014-05-16  浏览次数:20386 次

nodejs+express+mongodb存储json问题
大家好!
我在使用nodejs+express+mongodb结构做一个小东西。目标是实现textarea输入json串,直接保存到mongodb中。
源码如下:

var express = require('express');
var mongodb = require('mongodb');
var http = require('http');
var path = require('path');

var settings = require('./settings');

var app = express();

var MongoClient = require('mongodb').MongoClient;
var db;

// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.json());
app.use(express.urlencoded());
app.use(express.methodOverride());


app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));

// development only
if ('development' == app.get('env')) {
  app.use(express.errorHandler());
}

// Initialize connection once
MongoClient.connect("mongodb://localhost:27017/test", function(err, database) {
  if(err) throw err;

  db = database;

  http.createServer(app).listen(app.get('port'), function(){
    console.log('Express server listening on port ' + app.get('port'));
  });
});

app.get("/", function(req, res) { 
  db.collection("test").find({}, function(err, docs) {
    docs.each(function(err, doc) {
      if(doc) {
        console.log(doc);
      }
      else {
        res.end();
      }
    });
  });
  res.render('index', { title: 'Express' });
});

app.get("/add", function(req, res) { 
  res.render('add', {  });
});

app.post("/add", function(req, res) {
  var json = req.body.json;
  
  db.collection("test").insert(json, function(err, doc){
    if(err)
      console.error(err);
    else
      console.log("OK!"+doc);
  });
  res.end();
});

保存代码后,出现这样一个东西。

------解决方案--------------------
你这样获取出来的是json字符串 你用JSON.parse将其转化一下 再试试 
db.collection.save(JSON.parse(string),{safe:true},function(err,doc){......});
像后台写的json 可以将其保存为一个字符串 设定一个字段名就行