何时在 Node express 应用中使用 app.use()

iRo*_*tia 1 node.js express

我试图理解我们什么时候需要在我们的节点 Express 中使用app.use

在网上搜索时,我在reddit上偶然发现了这个答案,说明了app.get 和 app.use之间的区别

在此基础上,我总结了以下几点。

app.use充当超级路由还是中间件?这意味着它在下面/之后写的每条路线上都会被调用app.use

此外,如果有人可以添加有关 app.use 的更多信息/实践,我们将不胜感激。

小智 6

将 ExpressJS 与 NodeJS 一起使用时app.get,您可以使用和app.use用于几个有用的方面。

像 一样初始化您的应用程序后let app = express();,您可以在下面找到一些示例:

app.use(...)

正如您正确指出的那样,它对“中间件”很有用,它将适用于您指出 afterwords 的所有 GET、POST 等。例如,您只能在要“使用用户/通过身份验证”的 GET 之前使用中间件。

  • 指明静态内容的文件夹: app.use(express.static(__dirname + "/public"));

  • 包括 JSON 内容的解析器: app.use(bodyParser.json());

  • 定义“Cookie Parser”签名字符串: app.use(cookieParser("Signing text example"));

  • 在不同的文件网址,独立路由器:app.use("/api", apiRouter);app.use("/news", newsRouter);app.use("/", siteRouter);

  • 对于自定义错误处理程序:app.use(sites404handler);app.use(globalErrorHandler);

app.get(...)

在谈论时,app.get(...)您是在指示将通过 GET 方法访问哪些 URL。但是您可以在此处使用多个选项:

  • 表明你有一个主页: app.get("/", function(req, res) { res.send("Hello world!"); });

  • 接受 POST 请求: app.post("/", function(req, res) { res.send("Hello world! With POST call."); });

  • 您还可以将其作为“apiRouter.js”在另一个文件中分开并包含在那里: let router = express.Router(); router.route("/books").get(function(req, res) { res.send("/api/books/ called via a Router"); });

app.set(...)

请记住,您也可以选择app.set(...)。例如,这对于定义 Handlebars(.hbs 文件)等视图引擎很有用。

希望这可以帮助!