我使用带有express的节点,以下代码按预期工作。
文件 app.js
app.use(function (req, res, next) {
fs.mkdir('uploads/', function (e) {
if (!!e && e.code !== 'EEXIST') {
console.log('Error while trying to create upload folder: ' + err);
}
next();
});
}, upload.single('file'));
我的问题是,是否有更好的方式来写它? 我的意思是将功能逻辑分离到其他文件并需要它吗?
答案 0 :(得分:4)
我建议创建文件'{project_root} /middlewares/fsUtils.js':
function createFolderIfNotExists(folder) {
return function (req, res, next) {
fs.mkdir(folder, function (e) {
if (!!e && e.code !== 'EEXIST') {
console.log('Error while trying to create upload folder: ' + err);
}
next();
});
};
}
module.exports = {
createFolderIfNotExists: createFolderIfNotExists
};
然后你就可以使用它:
var fsUtils = require('./middlewares/fsUtils');
app.use(fsUtils.createFolderIfNotExists('/uploads'), upload.single('file'));
虽然不是理想的方法。最好将初始化逻辑移动到单独的脚本并在应用程序启动时运行它,以便在您希望文件系统中存在“uploads”文件夹时 - 它已经存在。
答案 1 :(得分:1)
这种扩展Danila Shutov's answer。我还建议您学会使用express.Router()
。通过使子路由可以重构为单个文件,这些可以帮助您更好地组织路由。
require
考虑下面的单个文件,您可以在其中定义所有路由,但导入具有require
的单个处理程序。它清理了一下,但你仍然会在一个文件中定义一大堆路线。如果你改变这些路线的路径,那将是一件麻烦事。
<强> index.js 强>
app.use("/", require("./root-route"));
app.use("/users", require("./users-route"));
app.use("/users/create", require("./users-create-route"));
app.use("/users/delete", require("./users-delete-route"));
app.use("/comments", require("./comments-route"));
app.use("/comments/create", require("./comments-create-route"));
app.use("/comments/delete", require("./comments-delete-route"));
express.Router()
现在考虑使用express.Router()
的多文件解决方案。没有一个路由器实际上必须知道彼此甚至是在同一个文件中。此外,您可以将路由器绑定到您想要的任何路径,然后切换它,而无需在整个项目中进行查找/替换。
例如,如果我们实际上不希望users
成为任何逻辑./users-route
的路径,我们可以将其挂载到players
,它会自动生效。
<强> users.js 强>
var usersRoute = require("express").Router();
usersRoute.use("/", require("./users-route"));
usersRoute.use("/create", require("./users-create-route"));
usersRoute.use("/delete", require("./users-delete-route"));
module.exports = usersRoute;
<强> comments.js 强>
var commentsRoute = require("express").Router();
commentsRoute.use("/", require("./comments-route"));
commentsRoute.use("/create", require("./comments-create-route"));
commentsRoute.use("/delete", require("./comments-delete-route"));
module.exports = commentsRoute;
<强> index.js 强>
app.use("/", require("./root-route"));
app.use("/users", require("./users"));
app.use("/comments", require("./comments"));