javascript – 如何从数据库中设置与对象id相同的文件名?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 如何从数据库中设置与对象id相同的文件名?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3179字,纯文字阅读大概需要5分钟。
内容图文
![javascript – 如何从数据库中设置与对象id相同的文件名?](/upload/InfoBanner/zyjiaocheng/906/d49f1c9c14374d9997a708bb6120e99b.jpg)
var express = require("express");
var app = express();
var mongoose = require("mongoose"),
bodyParser = require("body-parser"),
methodOverride = require("method-override"),
Book = require("./models/book"),
multer = require('multer');
var storage = multer.diskStorage({
destination: function (request, file, callback) {
callback(null, 'uploads/');
},
filename: function (request, file, callback) {
console.log(file);
callback(null, file.originalname)
}
});
var upload = multer({ storage: storage });
mongoose.Promise = global.Promise;
mongoose.connect("mongodb://localhost/books")
app.set("view engine", "ejs")
app.use(express.static(__dirname + "/public"))
app.use(methodOverride("_method"));
app.use(bodyParser.urlencoded({ extended: true }));
app.get("/", function (req, res) {
res.redirect("/books")
})
//Add new book
app.get("/books/new", function (req, res) {
res.render("books/new.ejs")
})
//CREATE BOOK logic
app.post("/books", upload.single('photo'), function (req, res, next) {
var name = req.body.name;
var price = req.body.price;
var desc = req.body.desc;
var newBook = { name: name, price: price, desc: desc }
// I want to change the name of image same as the id of this database data
Book.create(newBook, function (err, newlyCreated) {
if (err) {
console.log(err)
} else {
res.redirect("/books")
}
})
})
//SHOW page
app.get("/books/:id", function (req, res) {
Book.findById(req.params.id).exec(function (err, foundBook) {
if (err) {
console.log(err)
} else {
res.render("books/show.ejs", { books: foundBook });
}
})
})
app.get("*", function (req, res) {
res.send("Error 404");
});
app.listen(3000, function () {
console.log("server started");
});
这是我的app.js文件.现在我想保存图像名称,该名称与在数据库(mongoDB)中生成的特定书籍数据的对象ID相同.如何在app.post函数中更改文件名(在storage,filename中).
解决方法:
文件名函数中回调的第二个参数是你要设置它的任何字符串,所以只需将它设置为你从id mongoose为你创建的UUID.
根据评论添加的示例.
var storage = multer.diskStorage({
destination: function (request, file, callback) {
callback(null, 'uploads/');
},
filename: function (request, file, callback) {
if (request.book) {
// TODO: consider adding file type extension
return callback(null, request.book.id.toString());
}
// fallback to the original name if you don't have a book attached to the request yet.
return callback(null, file.originalname)
}
});
我经常通过将步骤分解为单个中间件来解决多步骤处理程序(例如,创建书籍,上传书籍,响应客户端).例如:
var upload = multer({ storage: storage });
function createBook(req, res, next) {
var name = req.body.name;
var price = req.body.price;
var desc = req.body.desc;
var newBook = { name: name, price: price, desc: desc }
// I want to change the name of image same as the id of this database data
Book.create(newBook, function (err, newlyCreated) {
if (err) {
next(err)
} else {
req.book = newlyCreated;
next();
}
})
}
app.post('/books', createBook, upload.single('photo'), function(req, res) {
// TODO: possibly return some code if there's no book, or redirect to the individual book page
res.redirect('/books');
});
// add error handler for one-stop logging of errors
app.use(function(err, req, res, next) {
console.log(err);
next(err); // or you can redirect to an error page here or something else
});
内容总结
以上是互联网集市为您收集整理的javascript – 如何从数据库中设置与对象id相同的文件名?全部内容,希望文章能够帮你解决javascript – 如何从数据库中设置与对象id相同的文件名?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。