因此,我刚刚在YouTube上观看了一些教程,这些教程是关于使用Multer上传文件的。
将变量gfs连接到我的/routes
文件夹时,我需要导出该变量,但是我该怎么做?
const mongoose = require("mongoose")
const Grid = require("gridfs-stream")
// Routes
const user = require("./routes/api/users")
// Init gfs
let gfs
// create gfs on connection 'open'
mongoose.connection
.once("open", () => {
// Init stream
gfs = Grid(mongoose.connection.db, mongoose.mongo)
gfs.collection("uploads")
console.log("mongoDB connected and gfs has been created")
})
.on("error", err => {
console.log("connection error", err)
})
// I need the gfs on the user routes
// use routes
app.use("/api/users", user)
答案 0 :(得分:1)
如果您想访问gfs
和/或middleware
内部的controller
,则可以执行以下操作:
mongoose.connection
.once('open', () => {
const gfs = Grid(mongoose.connection.db, mongoose.mongo)
gfs.collection('uploads')
// use `app.locals` to store the result when it finishes
app.locals.gfs = gfs
})
根据Express
文档:
app.locals
对象的属性是应用程序中的局部变量。设置后,
app.locals
属性的值将在应用程序的整个生命周期中保持不变,而res.locals
属性仅在请求的生命周期内有效。
请务必记住,在middleware
和/或controller
内部,正在处理route
的地方,您需要检查gfs
在您对其进行处理之前存在。
上述调用是异步的,因此gfs
不会立即可供您使用:
app.use('api/users/', user)
// routes/api/users.js
route.get('/', function(req, res, next) {
if (req.app.locals.gfs) {
// check if `app.locals.gfs` exists
}
// handle a case where `app.locals.gfs` hasn't been set yet
})
如果您想了解有关app.locals
的更多信息,请访问以下链接:
答案 1 :(得分:0)
let conn = mongoose.createConnection(<url>);
let gfs = Grid(conn.db, conn.mongo);
gfs.collection("uploads");
// write routes
module.exports = gfs;