node.js数据获取json模型错误

时间:2015-07-17 07:43:01

标签: json node.js

我是node.js的新手

我只是制作一个简单的应用程序 我的数据正确插入数据库以及从数据库中取出 但问题是,当我试图在json模型中访问它时,它给了我错误

var express = require('express');

/*
 * body-parser is a piece of express middleware that 
 *   reads a form's input and stores it as a javascript
 *   object accessible through `req.body` 
 *
 * 'body-parser' must be installed (via `npm install --save body-parser`)
 * For more info see: https://github.com/expressjs/body-parser
 */
var bodyParser = require('body-parser');

// create our app
var app = express();

// instruct the app to use the `bodyParser()` middleware for all routes
app.use(bodyParser.urlencoded({ extended: true }));

// A browser's default method is 'GET', so this
// is the route that express uses when we visit
// our site initially.
app.get('/', function(req, res){

  // The form's action is '/' and its method is 'POST',
  // so the `app.post('/', ...` route will receive the
  // result of our form
  var html = '<form action="/" method="post">' +
               'Enter your name:' +
               '<input type="text" name="userName" placeholder="Put your name" />' +
               '<br>' +'Enter your city:'+'<input type="text" name="userCity" placeholder="Put your city" />' +
               '<br>' +'Enter your state:'+'<input type="text" name="userState" placeholder="Put your state" />' +
               '<br>' +'Enter your country:'+'<input type="text" name="userCountry" placeholder="Put your country" />' +
               '<br>' +
               '<button type="submit">Submit</button>' +
            '</form>';

  res.send(html);
});

// This route receives the posted form.
// As explained above, usage of 'body-parser' means
// that `req.body` will be filled in with the form elements
app.post('/', function(req, res){

  var userName = req.body.userName;
  var userCity = req.body.userCity;
  var userState = req.body.userState;
  var userCountry = req.body.userCountry;
 // var document = {userName:userName,userCity:userCity,userState:userState,userCountry:userCountry};
  var html = 'Hello: ' + userName + '.<br>' +'City: ' + userCity + '.<br>'+'State: ' + userState + '.<br>'+'country: ' + userCountry + '.<br>'+
             '<a href="/">Try again.</a>';
 // res.send(html);
//res.send(JSON.stringify(doc));
//lets require/import the mongodb native drivers.
var mongodb = require('mongodb');
var assert = require('assert');
var ObjectId = require('mongodb').ObjectID;
//We need to work with "MongoClient" interface in order to connect to a mongodb server.
var MongoClient = require('mongodb').MongoClient;

// Connection URL. This is where your mongodb server is running.
var url = 'mongodb://localhost:27017/test';

// Use connect method to connect to the Server
MongoClient.connect(url, function (err, db) {
  if (err) {
    console.log('Unable to connect to the mongoDB server. Error:', err);
  } else {
    //HURRAY!! We are connected. :)
   console.log('Connection established to', url);
   /* var userName = req.body.userName;
  var userCity = req.body.userCity;
  var userState = req.body.userState;
  var userCountry = req.body.userCountry;
    var document = {userName:userName, userCity:userCity,userState:userState,userCountry:userCountry};*/
    // do some work here with the database.

    var insertDocument = function(db, callback) {
   db.collection('test').insertOne( {
      "userName" :userName,
      "userCity" : userCity,
      "userState" : userState,
      "userCountry" :userCountry ,


   }, function(err, result) {
    assert.equal(err, null);
    console.log("Inserted a document into the test collection.");
    callback(result);
  });
};
    var findDocument = function(db, callback) {
   var cursor =db.collection('test').find( );
   cursor.each(function(err, doc) {
      assert.equal(err, null);
      if (doc != null) {
        console.log(doc);
      //  res.contentType('application/json');
res.send(JSON.stringify(doc));
     /*  app.get('/test', function(req, res, next) {
  res.json(doc);
});*/
      } else {
         callback();
      }
    //   res.send(JSON.stringify(doc));
   });

};


    MongoClient.connect(url, function(err, db) {
  assert.equal(null, err);
  insertDocument(db, function() {
     findDocument(db, function() {
      db.close();
  });
  });

});



   /* var document = {name:"David", title:"About MongoDB"};
db.collection('test').insertOne(document, function(err, records) {
        if (err) throw err;
        console.log("Record added as "+records[0]._id);
    });*/
    //Close connection
   // db.close();
  }
});
});
app.listen(3000);

请帮我解决问题。 谢谢.. 我得到的错误是在发送后无法设置标题

1 个答案:

答案 0 :(得分:2)

这种错误通常意味着您尝试从同一路线多次使用res.send(...)

您可以在查找文档中看到,您使用cursor.each,并将结果发送到此cursor.each。这意味着您从同一路线发送多个结果。

您应该做的是拥有一个变量,用于存储结果,然后在检索完所有内容后再发送结果。