gpt4 book ai didi

javascript - 将 Mongo DB 对象数据库传递给 Express 中间件

转载 作者:可可西里 更新时间:2023-11-01 09:56:44 25 4
gpt4 key购买 nike

我在尝试访问 MongoDB 客户端模块连接到我的 MongoDB 数据库时创建的“DB”数据库对象时遇到问题。

目前我收到一条错误消息,指出在 data.js 中,“db”未定义。我明白这是为什么 - db 对象没有被“传递”到路由器,然后再传递到 Controller 。

执行此操作的最佳方法是什么?

我试图将“db”对象传递给路由器 (dataRoutes.js),但我不知道如何让 Controller (data.js) 可以访问它。有人可以帮忙吗?

请注意,我没有包含其他路由和 Controller ,但它们只是通过 POST 方法将表单提交到/data/submit 。下面的 Controller 用于将此表单数据写入 MongoDB 数据库。

相关代码如下:

应用程序.js

var express = require('express');
var path = require('path')
var MongoClient = require('mongodb').MongoClient;
var bodyParser = require('body-parser');
var app = express();

var routes = require('./routes/index');
var dataRoutes = require('./routes/dataRoutes');

app.use(bodyParser.urlencoded({ extended: false }));
app.use(express.static(path.join(__dirname, 'public')));

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');


MongoClient.connect("mongodb://localhost:27017/m101", function(err, db) {

if(err) throw err;

console.log("Successfully connected to MongoDB.");

app.use('/', routes); // Use normal routes for wesbite
app.use('/data', dataRoutes);


app.get('/favicon.ico', function(req, res) {
res.send(204);
});

app.use(function(req, res, next) {
var err = new Error('Oops Page/Resource Not Found!');
err.status = 404;
next(err); //Proceed to next middleware
});

if (app.get('env') === 'development') {
app.use(function(err, req, res, next) {
// update the error responce, either with the error status
// or if that is falsey use error code 500
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: err
});
});
}

app.use(function(err, req, res, next) {
console.log('Error');
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: {}
});

});

var server = app.listen(3000, function() {
var port = server.address().port;
console.log("Express server listening on port %s.", port);
});

});

数据路由.js

    // router

var express = require('express');
var router = express.Router();

// controller references
var ctrlsData = require('../controllers/data');

router.post('/submit', ctrlsData.submit);


module.exports = router;

数据.js

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

var sendJsonResponse = function(res, status, content) {
res.status(status);
res.json(content);
};

module.exports.submit = function(req, res) {
var title = req.body.title;
var year = req.body.year;
var imdb = req.body.imdb;

/*
console.log('submitted');
console.log(req.body);
sendJsonResponse(res, 201, {title,year,imdb});
*/

var title = req.body.title;
var year = req.body.year;
var imdb = req.body.imdb;



if ((title == '') || (year == '') || (imdb == '')) {
sendJsonResponse(res, 404, {
"message": "Title, Year and IMDB Reference are all required."
});
} else {
db.collection('movies').insertOne(
{ 'title': title, 'year': year, 'imdb': imdb },
function (err, r) {
if (err) {
sendJsonResponse(res, 400, err);
} else {
sendJsonResponse(res, 201, "Document inserted with _id: " + r.insertedId + {title,year,imdb});
}
}
);

}

};

最佳答案

app.js 中创建一个引用 mongodb 的 db 变量:

MongoClient.connect("mongodb://localhost:27017/m101", function(err, db) {

app.db = db;

//.....
});

data.js 中,从 req.app 访问 db :

module.exports.submit = function(req, res) {

req.app.db.collection('movies').insertOne({ 'title': title, 'year': year, 'imdb': imdb },
function(err, r) {}
)
};

关于javascript - 将 Mongo DB 对象数据库传递给 Express 中间件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41794107/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com