为我的 node.js 项目设置路由器
Setting up routers for my node.js project
所以我 运行 在为我的 node.js 应用设置路线时遇到了很多问题
这是我的 app.js 以及我如何调用路由
const express = require("express");
const bodyParser = require("body-parser");
const app = express();
require('dotenv').config()
const passport = require('passport')
const flash = require('express-flash')
const session = require('express-session')
const initializePassport = require('./passport-config')
const saltRounds = 10;
app.set('view engine', 'ejs');
app.use(bodyParser.urlencoded({
extended: true
}));
app.use(express.static("public"));
// app.use('/public', express.static(__dirname + "/public"))
app.use(flash())
app.use(session({
secret: process.env.SESSION_SECRET,
resave: false,
saveUninitialized: false
}))
app.use(passport.initialize())
app.use(passport.session())
//Routes
// app.use(require('./routes'));
require('./routes/index.js')(app, passport, bcrypt, checkAuthenticated, checkNotAuthenticated, dbSize, saltRounds, User, setupDb);
require('./routes/dashboard.js')(app, passport, checkAuthenticated, checkNotAuthenticated, User, User_database, dbSize, Db_size, setupDb);
require('./routes/db.js')(app, passport, checkAuthenticated, checkNotAuthenticated, User, dbSize, User_database, Db_size, Db_tablespace, setupDb);
//GETS and POSTS
app.get('/logout', function (req, res) {
req.logout();
res.redirect("/");
});
app.use((req, res) => {
res.status(404).render('404');
});
这是我的路线之一 db.js
var express = require('express');
var router = express.Router();
const Db_size = require('../db/models/db_size')
const Db_tablespace = require('../db/models/db_tablespace')
module.exports = (app, passport, checkAuthenticated, checkNotAuthenticated, User,dbSize,User_database,Db_size,Db_tablespace,setupDb) => {
router.get('/:id/db_size', checkAuthenticated, async function (req, res) {
const id = req.params.id;
try {
let dbSizeInfo = await Db_size.query().where('db_id',id)
res.render("db-size", {
free: dbSizeInfo[0].db_free,
used: dbSizeInfo[0].db_used
});
app.use('/db/'+id , express.static("public"));
} catch (error) {
console.error(error)
}
});
app.use('/db', router , express.static("public"));
// app.use('/db/?', express.static("public"));
}
正如您在 db.js 中看到的那样,我在路线上重新定义了我的 public 文件夹,所以就像每次我创建路线时一样,我在每个路线上都重新定义了我的 public 文件夹我制作的路线(否则它会在 /theCalledRoute 文件夹中查找我的静态文件,而不是 /public ),这很烦人但它有效。但是,现在我将 /:id 添加到它正在查找 db/:id 文件夹以查找我所有的静态文件而不是 public。我会做一个 app.use('/everyidever', router , express.static("public"));对于所有的ID。 有更好的方法吗?。我需要从我的 app.js 导出必要的变量以使一切正常。如果您需要更多信息,请告诉我
第一个文件开头的静态资源public
目录定义正确
// app.use('/public', express.static(__dirname + "/public"))
静态文件(样式、js、图像、文件等)的 URL 在模板中应以 /
开头,例如,假设您有一个名为 logo.png
在 /public
目录中,因此在您的模板中您应该将其称为:
<img src="/logo.png"/>
Node JS 将从您配置的目录 public
提供该图像,请注意路径开头的 /
。
所以我 运行 在为我的 node.js 应用设置路线时遇到了很多问题
这是我的 app.js 以及我如何调用路由
const express = require("express");
const bodyParser = require("body-parser");
const app = express();
require('dotenv').config()
const passport = require('passport')
const flash = require('express-flash')
const session = require('express-session')
const initializePassport = require('./passport-config')
const saltRounds = 10;
app.set('view engine', 'ejs');
app.use(bodyParser.urlencoded({
extended: true
}));
app.use(express.static("public"));
// app.use('/public', express.static(__dirname + "/public"))
app.use(flash())
app.use(session({
secret: process.env.SESSION_SECRET,
resave: false,
saveUninitialized: false
}))
app.use(passport.initialize())
app.use(passport.session())
//Routes
// app.use(require('./routes'));
require('./routes/index.js')(app, passport, bcrypt, checkAuthenticated, checkNotAuthenticated, dbSize, saltRounds, User, setupDb);
require('./routes/dashboard.js')(app, passport, checkAuthenticated, checkNotAuthenticated, User, User_database, dbSize, Db_size, setupDb);
require('./routes/db.js')(app, passport, checkAuthenticated, checkNotAuthenticated, User, dbSize, User_database, Db_size, Db_tablespace, setupDb);
//GETS and POSTS
app.get('/logout', function (req, res) {
req.logout();
res.redirect("/");
});
app.use((req, res) => {
res.status(404).render('404');
});
var express = require('express');
var router = express.Router();
const Db_size = require('../db/models/db_size')
const Db_tablespace = require('../db/models/db_tablespace')
module.exports = (app, passport, checkAuthenticated, checkNotAuthenticated, User,dbSize,User_database,Db_size,Db_tablespace,setupDb) => {
router.get('/:id/db_size', checkAuthenticated, async function (req, res) {
const id = req.params.id;
try {
let dbSizeInfo = await Db_size.query().where('db_id',id)
res.render("db-size", {
free: dbSizeInfo[0].db_free,
used: dbSizeInfo[0].db_used
});
app.use('/db/'+id , express.static("public"));
} catch (error) {
console.error(error)
}
});
app.use('/db', router , express.static("public"));
// app.use('/db/?', express.static("public"));
}
正如您在 db.js 中看到的那样,我在路线上重新定义了我的 public 文件夹,所以就像每次我创建路线时一样,我在每个路线上都重新定义了我的 public 文件夹我制作的路线(否则它会在 /theCalledRoute 文件夹中查找我的静态文件,而不是 /public ),这很烦人但它有效。但是,现在我将 /:id 添加到它正在查找 db/:id 文件夹以查找我所有的静态文件而不是 public。我会做一个 app.use('/everyidever', router , express.static("public"));对于所有的ID。 有更好的方法吗?。我需要从我的 app.js 导出必要的变量以使一切正常。如果您需要更多信息,请告诉我
第一个文件开头的静态资源public
目录定义正确
// app.use('/public', express.static(__dirname + "/public"))
静态文件(样式、js、图像、文件等)的 URL 在模板中应以 /
开头,例如,假设您有一个名为 logo.png
在 /public
目录中,因此在您的模板中您应该将其称为:
<img src="/logo.png"/>
Node JS 将从您配置的目录 public
提供该图像,请注意路径开头的 /
。