Jquery 如何将上传到MongoDb的文件与其他数据一起以表单的形式保存到MongoDb?
我正在尝试将Jquery 如何将上传到MongoDb的文件与其他数据一起以表单的形式保存到MongoDb?,jquery,node.js,mongodb,Jquery,Node.js,Mongodb,我正在尝试将表单数据保存到MongoDb,其中还包括一个图像文件上传。我使用Jquery表单序列化将此数据发送到服务器。其余数据保存到数据库中,而不是图像。我想它需要一些特殊的处理。我该怎么做?注意:我希望能够将其与所有表单数据一起发送 这是我的html部分: <!-- SIGNUP for USERS and ADMIN --> <div id="pageSignup" class="page popup"> <div class="wra
表单数据
保存到MongoDb
,其中还包括一个图像文件上传
。我使用Jquery表单序列化
将此数据发送到服务器
。其余数据保存到数据库中,而不是图像。我想它需要一些特殊的处理。我该怎么做?注意:我希望能够将其与所有表单数据一起发送
这是我的html部分:
<!-- SIGNUP for USERS and ADMIN -->
<div id="pageSignup" class="page popup">
<div class="wrapper">
<h3>SIGNUP</h3>
<form class="form" id="frmSignup">
<input type="text" id="txtEmailorPhoneNumber" name="txtEmailorPhoneNumber" placeholder="Mobile number or Email" required>
<input type="text" name="txtName" placeholder="Name" required>
<input type="text" name="txtLastName" placeholder="Lastname" required>
<input type="password" name="txtPassword" placeholder="Password" required>
<div class="lblFileUpload">
<p>Select your picture:</p>
<input type="file" name="fileUserImage" required>
</div>
<button type="button" class="btnShowPage btnForm" id="btnSignupForm">Signup</button>
<div class="lblFormExtention">
<p class="pyesAccount">Already have an account?</p>
<button type="button" class="btnShowPage" id="btnLogin" data-showThisPage="pageLogin">Login</button>
</div>
</form>
<h3 class="lblErrorMessage" id="lblSignupErrorMessage"></h3>
</div>
</div>
这是我的server.js:
var express = require('express')
var app = express()
var formidable = require('express-formidable');
app.use(formidable());
app.use(express.static(__dirname + '/public'));
var fs = require('fs')
var mongo = require('mongodb').MongoClient
global.db = null
var sDatabasePath = 'mongodb://localhost:27017/webshop'
global.mongoId = require('mongodb').ObjectID
/**************************************************/
var user = require(__dirname + '/user.js')
/**************************************************/
app.get('/shopaholic', (req, res) => { res.sendFile(__dirname + '/shopaholic.html') })
mongo.connect(sDatabasePath, (err, db) => {
if (err) {
console.log('ERROR 003 -> Cannot connect to the database')
return false
}
global.db = db
console.log('OK 002 -> Connected to the database')
return true
})
/**************************************************/
app.post('/save-user', (req, res) => {
//var sName = req.fields.userName
//console.log("sName ", sName)
user.saveUser(req.fields, (err, jResult) => {
if (err) {
console.log(jResult)
res.send('ERROR')
return
}
console.log(jResult)
res.send('OK')
return
})
})
/**************************************************/
app.listen(3000, (err) => {
if (err) {
console.log('ERROR 001 -> Cannot listen to port 3000')
return false
}
console.log('OK 000 -> Server listening to port 3000')
})
最后是我的user.js:
var user = {}
/**************************************************/
user.saveUser = (jUserData, fcallback) => {
var jUser = { "userName": jUserData.txtEmailorPhoneNumber, "firstName": jUserData.txtName, "lastName": jUserData.txtLastName, "password": jUserData.txtPassword, "image": jUserData.fileUserImage }
global.db.collection('users').insertOne(jUser, (err, jResult) => {
if (err) {
var jError = { "status": "error", "message": "ERROR -> user.js -> 001" }
console.log(jError)
return fcallback(true, jError)
}
var jOk = { "status": "ok", "message": "user.js -> saved -> 000" }
console.log(jOk)
return fcallback(false, jOk)
})
}
/**************************************************/
module.exports = user
我建议您使用multer模块来处理文件上传,只在mongodb数据库中保存image的路径/url,如果您遇到这种方法的任何问题,请告诉我。我很乐意为您提供帮助。我建议您使用multer模块来处理文件上传,并且只在mongodb数据库中保存图像的路径/url,如果您遇到这种方法的任何问题,请告诉我。我很乐意提供帮助。这不可能,但我个人从未使用过它(express Forweible)。正如您所见,我已经在使用它,它确实将其余数据保存到Mongodb,但不会将img上载。这是我在数据库中得到的:
{“\u id”:ObjectId(“5a0d92f3b8011348aa8dae2e”),“userName”:a@a.dk“,“firstName”:“A”,“lastName”:“A”,“password”:“1”,“image”:null}
在代码中,您只读取非文件字段的req.fields,因此需要读取文件的req.files。我希望这就是问题所在。它不起作用。我认为实际上我不能直接将文件发送到mongoDb,首先我需要将上传的文件保存在文件系统的文件夹中,然后将其保存到db。这就是我在许多教程中看到的情况,但我也不确定。这不可能仅仅是因为强大吗?这是可能的,但我个人从未使用过它(express Knowledge)。正如你所看到的,我已经在使用它,它确实会将其余数据保存到Mongodb,但不会将img上载。这是我在数据库中得到的:{“\u id”:ObjectId(“5a0d92f3b8011348aa8dae2e”),“userName”:a@a.dk“,“firstName”:“A”,“lastName”:“A”,“password”:“1”,“image”:null}
在代码中,您只读取非文件字段的req.fields,因此需要读取文件的req.files。我希望这就是问题所在。它不起作用。我认为实际上我不能直接将文件发送到mongoDb,首先我需要将上传的文件保存在文件系统的文件夹中,然后将其保存到db。这是我在很多教程中看到的,但我也不确定。
var user = {}
/**************************************************/
user.saveUser = (jUserData, fcallback) => {
var jUser = { "userName": jUserData.txtEmailorPhoneNumber, "firstName": jUserData.txtName, "lastName": jUserData.txtLastName, "password": jUserData.txtPassword, "image": jUserData.fileUserImage }
global.db.collection('users').insertOne(jUser, (err, jResult) => {
if (err) {
var jError = { "status": "error", "message": "ERROR -> user.js -> 001" }
console.log(jError)
return fcallback(true, jError)
}
var jOk = { "status": "ok", "message": "user.js -> saved -> 000" }
console.log(jOk)
return fcallback(false, jOk)
})
}
/**************************************************/
module.exports = user