var createError = require('http-errors'); var express = require('express'); var path = require('path'); var cookieParser = require('cookie-parser'); var logger = require('morgan'); var indexRouter = require('./routes/index'); var usersRouter = require('./routes/users'); const UserRouter = require('./routes/admin/UserRouter'); const JWT = require('./util/JWT'); const NewsRouter = require('./routes/admin/NewsRouter'); const webNewsRouter = require('./routes/web/NewsRouter'); const ProductRouter = require('./routes/admin/ProductRouter'); var app = express(); // view engine setup app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'jade'); app.use(logger('dev')); app.use(express.json()); app.use(express.urlencoded({ extended: false })); app.use(cookieParser()); app.use(express.static(path.join(__dirname, 'public'))); app.use('/', indexRouter); app.use('/users', usersRouter); app.use(webNewsRouter) /* /adminapi/* - 后台系统用的 /webapi/* - 企业官网用的 */ app.use((req, res, next) => { // 如果token有效 ,next() // 如果token过期了, 返回401错误 if (req.url === "/adminapi/user/login") { next() return; } const token = req.headers["authorization"].split(" ")[1] if (token) { var payload = JWT.verify(token) // console.log(payload) if (payload) { const newToken = JWT.generate({ _id: payload._id, username: payload.username }, "1d") res.header("Authorization", newToken) next() } else { res.status(401).send({ errCode: "-1", errorInfo: "token过期" }) } } }) app.use(UserRouter) app.use(NewsRouter) app.use(ProductRouter) // catch 404 and forward to error handler app.use(function (req, res, next) { next(createError(404)); }); // error handler app.use(function (err, req, res, next) { // set locals, only providing error in development res.locals.message = err.message; res.locals.error = req.app.get('env') === 'development' ? err : {}; // render the error page res.status(err.status || 500); res.render('error'); }); module.exports = app;
时间: 2024-04-18 11:29:12 浏览: 214
http-errors:创建HTTP错误
根据你提供的代码,这是一个使用 Express 框架构建的 Node.js 应用程序。它包含了一些中间件和路由处理程序。
首先,它引入了一些依赖包和模块,如 `http-errors`、`express`、`path`、`cookie-parser` 和 `logger`。然后,它引入了一些路由文件,如 `indexRouter`、`usersRouter`、`UserRouter`、`NewsRouter`、`webNewsRouter` 和 `ProductRouter`。
接着,它创建了一个 Express 应用程序实例,并设置了视图引擎为 Jade,并指定了视图文件夹的路径。然后,它使用了一些中间件,如 `logger`、`express.json()`、`express.urlencoded()`、`cookieParser()` 和 `express.static()`,以及指定了静态文件的路径。
接下来,它使用了一些路由处理程序,如 `indexRouter`、`usersRouter`、`webNewsRouter`、`UserRouter`、`NewsRouter` 和 `ProductRouter`。
在这段代码中,有一个自定义的中间件函数,它首先检查请求的 URL 是否为 "/adminapi/user/login",如果是,则继续执行下一个中间件或路由处理程序。否则,它会解析请求头中的 Authorization 字段,并验证 JWT 令牌的有效性。如果令牌有效,则生成新的令牌,并将其设置到响应头的 Authorization 字段中,并继续执行下一个中间件或路由处理程序。如果令牌无效或过期,则返回 401 错误。
最后,它定义了一个错误处理中间件,用于捕获 404 错误和其他错误,并将其渲染为错误页面。
整个应用程序通过 `module.exports` 导出,可以在其他文件中引入和使用这个应用程序实例。
这只是你提供的代码的一个概览,如果你有具体的问题或需要更多解释,请告诉我。
阅读全文