Javascript 无法将上载的图像保存到Hapi.js中的数据库
我想使用hapi.js在mongodb中保存上传的照片。但是我可以将照片上传到uploads文件夹中,但我无法将其保存到数据库中。代码如下:Javascript 无法将上载的图像保存到Hapi.js中的数据库,javascript,node.js,mongodb,async-await,hapijs,Javascript,Node.js,Mongodb,Async Await,Hapijs,我想使用hapi.js在mongodb中保存上传的照片。但是我可以将照片上传到uploads文件夹中,但我无法将其保存到数据库中。代码如下: server.route({ method: 'POST', path: '/upload', config: { payload: { output: "stream",
server.route({
method: 'POST',
path: '/upload',
config: {
payload: {
output: "stream",
parse: true,
allow: "multipart/form-data",
maxBytes: 2 * 1000 * 1000
}
},
handler: async (req, h) => {
const response1 = handleFileUpload(req.payload.image);
console.log(response1);
return response1;
}
});
const handleFileUpload = file => {
return new Promise((resolve, reject) => {
const filename = file.hapi.filename
const data = file._data
fs.writeFile(`./uploads/${filename}`, data, err => {
if (err) {
reject(err)
}
resolve({
message: 'Upload successfully!',
imageUrl: `${server.info.uri}/uploads/${filename}`
})
})
})
}
当它发送响应消息和imageUrl时。我必须将imageurl保存在db上,但我不知道如何从promise return中访问它。我是个新来的应许者。
这是我的模型模式:
const stuSchema = new Schema({
image : String,
});
html:
但是我想把它们写在解析器函数上,但它接受对象您需要使用
wait
和handleFileUpload
函数从Promise
对象中获取数据,然后在下面可以使用save()
函数在数据库中创建文档
handler: async (req, reply) => {
try {
const { imageUrl } = await handleFileUpload(req.payload.image);
const user = new User ({ image: imageUrl });
const result = user.save();
return ({ message: 'Saved Successfully' });
} catch (err) {
throw err
}
}
const handleFileUpload = file => {
return new Promise((resolve, reject) => {
const filename = file.hapi.filename;
const data = file._data;
return fs.writeFile(`./uploads/${filename}`, data, err => {
if (err) {
return reject(err)
}
return resolve({
message: "Upload successfully!",
imageUrl: `${server.info.uri}/uploads/${filename}`
})
})
})
}
错误消息是什么?我的意思是我必须将保存值的响应返回到数据库,但我已经在这里返回了承诺,所以我应该如何返回输入值以将其保存到数据库中。我应该在哪里写入此
user.save()
行?只有一些id被保存到数据库中,但没有imageUrl被保存到数据库中。我已经按照hapi new编辑了return reply({message:'Saved Successfully'})
到这个return reply.response(sav)
version@InsaneDA更新了我的答案。您只需使用相同的字段image
保存即可。谢谢。但是对代码的一个修复返回回复({message:'Saved Successfully'})
它将给出一个类型错误回复不是一个函数。使用新的API,您不必使用响应工具包来返回文本响应,只需从处理程序返回文本即可。
const user = new User (imageUrl);
const sav = user.save();
return h.response(sav)
handler: async (req, reply) => {
try {
const { imageUrl } = await handleFileUpload(req.payload.image);
const user = new User ({ image: imageUrl });
const result = user.save();
return ({ message: 'Saved Successfully' });
} catch (err) {
throw err
}
}
const handleFileUpload = file => {
return new Promise((resolve, reject) => {
const filename = file.hapi.filename;
const data = file._data;
return fs.writeFile(`./uploads/${filename}`, data, err => {
if (err) {
return reject(err)
}
return resolve({
message: "Upload successfully!",
imageUrl: `${server.info.uri}/uploads/${filename}`
})
})
})
}