node.js - 必须打开数据库连接才能将文件存储在 GridFSStorage._handleFile
问题描述
我尝试通过以下 Web 应用程序在本地 MongoDB 服务器上上传文件:
const express = require("express");
const bodyParser = require('body-parser');
const path = require('path');
const crypto = require('crypto');
const mongoose = require('mongoose');
const GridFsStorage = require('multer-gridfs-storage');
const Grid = require('gridfs-stream');
const methodOverride = require('method-override');
const multer = require('multer');
const app = express();
// Middleware
app.use(bodyParser.json());
app.use(methodOverride('_method'));
app.set('view engine', 'ejs');
// Mongo URI
const mongoURI =
'mongodb://localhost:27017/database'
// Create mongo connection
const conn = mongoose.createConnection(mongoURI);
// Init gifs
let gfs;
conn.once('open', () => {
// Init Stream
gfs = Grid(conn.db, mongoose.mongo);
gfs.collection('uploads');
})
// Create storage engine
const storage = new GridFsStorage({
url: 'mongodb://localhost:27017/database',
file: (req, file) => {
return new Promise((resolve, reject) => {
crypto.randomBytes(16, (err, buf) => {
if (err) {
return reject(err);
}
const filename = buf.toString('hex') + path.extname(file.originalname);
const fileInfo = {
filename: filename,
bucketName: 'uploads'
};
resolve(fileInfo);
});
});
}
});
const upload = multer({ storage });
// @route GET /
// @desc Loads form
app.get('/', (req, res) => {
res.render('index');
})
// @route POST /upload
//@desc upload file to DB
app.post('/upload', upload.single('file'), (req, res) => {
res.json({ file: req.file });
});
const port = 27017;
app.listen(port, () => console.log('服务器在端口 ${port}')); 但我收到错误:“必须打开数据库连接才能在 GridFSStorage._handleFile (/Users/payam/Desktop/mongodb-uploads/node_modules/multer-gridfs-storage/lib/gridfs.js:341:17) 处存储文件/Users/payam/Desktop/mongodb-uploads/node_modules/multer/lib/make-middleware.js:144:17 at allowAll (/Users/.../Desktop/mongodb-uploads/node_modules/multer/index.js: 8:3) 在 Busboy 的 WrappedFileFilter (/Users/.../Desktop/mongodb-uploads/node_modules/multer/index.js:44:7)。(/Users/.../Desktop/mongodb-uploads/node_modules /multer/lib/make-middleware.js:114:7) 在 Busboy.emit (events.js:182:13) 在 Busboy.emit (/Users/.../Desktop/mongodb-uploads/node_modules/busboy/ lib/main.js:38:33) 在 PartStream. (/Users/... /Desktop/mongodb-uploads/node_modules/busboy/lib/types/multipart.js:213:13) 在 HeaderParser 的 PartStream.emit (events.js:182:13)。(/Users/.../Desktop/mongodb-uploads/node_modules/dicer/lib/Dicer.js:51:16) 在 HeaderParser.emit (events.js:182:13) 在 HeaderParser._finish (/Users/. ../Desktop/mongodb-uploads/node_modules/dicer/lib/HeaderParser.js:68:8) 在 SBMH。(/Users/.../Desktop/mongodb-uploads/node_modules/dicer/lib/HeaderParser.js:40:12) 在 SBMH.emit (events.js:182:13) 在 SBMH._sbmh_feed (/Users/. ../Desktop/mongodb-uploads/node_modules/streamsearch/lib/sbmh.js:159:14) 在 SBMH.push (/Users/.../Desktop/mongodb-uploads/node_modules/streamsearch/lib/sbmh.js :56:14)”。任何人都可以帮助并告诉我我的代码或我的机器有什么问题吗?13) 在 HeaderParser 的 PartStream.emit (events.js:182:13)。(/Users/.../Desktop/mongodb-uploads/node_modules/dicer/lib/Dicer.js:51:16) 在 HeaderParser.emit (events.js:182:13) 在 HeaderParser._finish (/Users/. ../Desktop/mongodb-uploads/node_modules/dicer/lib/HeaderParser.js:68:8) 在 SBMH。(/Users/.../Desktop/mongodb-uploads/node_modules/dicer/lib/HeaderParser.js:40:12) 在 SBMH.emit (events.js:182:13) 在 SBMH._sbmh_feed (/Users/. ../Desktop/mongodb-uploads/node_modules/streamsearch/lib/sbmh.js:159:14) 在 SBMH.push (/Users/.../Desktop/mongodb-uploads/node_modules/streamsearch/lib/sbmh.js :56:14)”。任何人都可以帮助并告诉我我的代码或我的机器有什么问题吗?13) 在 HeaderParser 的 PartStream.emit (events.js:182:13)。(/Users/.../Desktop/mongodb-uploads/node_modules/dicer/lib/Dicer.js:51:16) 在 HeaderParser.emit (events.js:182:13) 在 HeaderParser._finish (/Users/. ../Desktop/mongodb-uploads/node_modules/dicer/lib/HeaderParser.js:68:8) 在 SBMH。(/Users/.../Desktop/mongodb-uploads/node_modules/dicer/lib/HeaderParser.js:40:12) 在 SBMH.emit (events.js:182:13) 在 SBMH._sbmh_feed (/Users/. ../Desktop/mongodb-uploads/node_modules/streamsearch/lib/sbmh.js:159:14) 在 SBMH.push (/Users/.../Desktop/mongodb-uploads/node_modules/streamsearch/lib/sbmh.js :56:14)”。任何人都可以帮助并告诉我我的代码或我的机器有什么问题吗?/Desktop/mongodb-uploads/node_modules/dicer/lib/Dicer.js:51:16) 在 HeaderParser.emit (events.js:182:13) 在 HeaderParser._finish (/Users/.../Desktop/mongodb- uploads/node_modules/dicer/lib/HeaderParser.js:68:8) 在 SBMH。(/Users/.../Desktop/mongodb-uploads/node_modules/dicer/lib/HeaderParser.js:40:12) 在 SBMH.emit (events.js:182:13) 在 SBMH._sbmh_feed (/Users/. ../Desktop/mongodb-uploads/node_modules/streamsearch/lib/sbmh.js:159:14) 在 SBMH.push (/Users/.../Desktop/mongodb-uploads/node_modules/streamsearch/lib/sbmh.js :56:14)”。任何人都可以帮助并告诉我我的代码或我的机器有什么问题吗?/Desktop/mongodb-uploads/node_modules/dicer/lib/Dicer.js:51:16) 在 HeaderParser.emit (events.js:182:13) 在 HeaderParser._finish (/Users/.../Desktop/mongodb- uploads/node_modules/dicer/lib/HeaderParser.js:68:8) 在 SBMH。(/Users/.../Desktop/mongodb-uploads/node_modules/dicer/lib/HeaderParser.js:40:12) 在 SBMH.emit (events.js:182:13) 在 SBMH._sbmh_feed (/Users/. ../Desktop/mongodb-uploads/node_modules/streamsearch/lib/sbmh.js:159:14) 在 SBMH.push (/Users/.../Desktop/mongodb-uploads/node_modules/streamsearch/lib/sbmh.js :56:14)”。任何人都可以帮助并告诉我我的代码或我的机器有什么问题吗?
解决方案
我需要做的就是为 Mongo URI 设置 useNewUrlParser: true :
// Create mongo connection
const conn = mongoose.createConnection(mongoURI, { useNewUrlParser: true });
对于端口,您可以设置为 5000,如下所示:
const port = 5000;
app.listen(port, () => console.log(`server started on port ${port}`));
推荐阅读
- neo4j - 在 Neo4j 中,查询以检索短于某个长度的子链
- java - 无法在 Spring 中为集成测试配置模块 - 没有可用的任务
- bash - 使用 bash 将路由器配置部分转换为 csv 文件
- jinja2 - 在 Flask 的页面上多次使用相同的 WTForms 字段
- python-3.x - Python 3 Tkinter 问题:除非激活另一个 gui,否则 Gui 不显示
- r - 如何在自定义网格(如geofacet)上保存分面图而不打印空分面
- angular - 如何在材质树组件中渲染角度组件
- lucene - Jackrabbit Oak Lucine 索引和 SQL2 查询,用于在 txt 和 pdf 中进行全文搜索
- java - @Value:Spring 使用 application-'profile'.properties 注入自动装配依赖项时出现异常
- ruby-on-rails - 如何使用 Rails FooABC 模型?