首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使MongoDB在Express的HTTP方法中可用?

如何使MongoDB在Express的HTTP方法中可用?
EN

Stack Overflow用户
提问于 2016-02-13 14:10:07
回答 1查看 362关注 0票数 0

我正在尝试在Node/Express中使用MongoDB。我让官方例子发挥了作用:

代码语言:javascript
复制
var express = require('express')
var MongoClient = require('mongodb').MongoClient
var assert = require('assert')
var app = express()

// Connection URL
var url = 'mongodb://localhost:27017/myproject'
// Use connect method to connect to the Server
MongoClient.connect(url, function(err, db) {
  assert.equal(null, err)
  console.log("Connected correctly to server")

  insertDocuments(db, function() {
    db.close()
  })
})

var insertDocuments = function(db, callback) {
  // Get the documents collection
  var collection = db.collection('documents')
  // Insert some documents
  collection.insertMany([
    // Some code
  ], function(err, result) {
    // Some code
    callback(result)
  })
}

app.get('/insert-document', function(req, res) {
  // res.send()
})

我如何才能使Mongo在Express的HTTP方法中可用?例如,在insertDocuments()中使用app.get('/insert-document', function(req, res)

server.js 编辑(完整文件):

代码语言:javascript
复制
var express = require('express')
// var PouchDB = require('pouchdb')
var MongoClient = require('mongodb').MongoClient
var assert = require('assert')
var webpack = require('webpack')
var config = require('./webpack.dev.conf')

var app = express()
var compiler = webpack(config)

// Connection URL
var url = 'mongodb://localhost:27017/myproject'
// Use connect method to connect to the Server
var db

MongoClient.connect(url, function(err, db) {
  assert.equal(null, err)
  console.log("Connected correctly to server")
  db = db
})

var insertDocuments = function(db, callback) {
  // Get the documents collection
  var collection = db.collection('documents')
  // Insert some documents
  collection.insertMany([
    {a : 1}, {a : 2}, {a : 3}
  ], function(err, result) {
    assert.equal(err, null)
    assert.equal(3, result.result.n)
    assert.equal(3, result.ops.length)
    console.log("Inserted 3 documents into the document collection")
    callback(result)
  })
}

// handle fallback for HTML5 history API
app.use(require('connect-history-api-fallback')())

// serve webpack bundle output
app.use(require('webpack-dev-middleware')(compiler, {
  publicPath: config.output.publicPath,
  stats: {
    colors: true,
    chunks: false
  }
}))

// enable hot-reload and state-preserving
// compilation error display
app.use(require('webpack-hot-middleware')(compiler))

app.get('/docs', function(req, res) {
  // res.send()
  insertDocuments(db, function() {
    db.close()
  })
})

app.listen(8080, 'localhost', function (err) {
  if (err) {
    console.log(err)
    return
  }
  console.log('Listening at http://localhost:8080')
})

我得到了

(/home/alex/node/project-mongo/build/dev-server.js:24:22):无法读取未定义的insertDocuments insertDocuments的属性“集合”

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-13 14:21:32

参考代码这里,将连接db保存为一个全局变量,示例代码如下所示。

代码语言:javascript
复制
var db;

MongoClient.connect(url, function(err, db) {
      assert.equal(null, err)
      console.log("Connected correctly to server")

      db = db;
      // Start the application after the database connection is ready
      app.listen(3000);
      console.log("Listening on port 3000");
});

// Reuse database object in request handlers
app.get('/insert-document', function(req, res) {
      // insertDocuments() could invoked here.
});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35380927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档