我试图理解何时需要在节点Express
中使用 app.use在网上搜索时,我在reddit stating the difference between app.get和app.use上偶然发现了这个答案
基于此,我能够总结以下内容。
app.use
是超级路由还是中间件?意味着它在app.use
下面/之后写的每条路线上都被调用?
此外,如果有人可以添加有关app.use的更多信息/做法,我们将不胜感激。
答案 0 :(得分:2)
用于静态路径
//Set static path
app.use(express.static(__dirname + '/public'));
用作路由器
//user
app.use('/', require('./controllers/user'));
用于手动中间件
//Body-parser
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: true
}));// Body parser use JSON data
用于自定义中间件
// force https
app.use ( (req, res, next) =>{
if (req.secure) {
// request was via https, so do no special handling
next();
} else {
// request was via http, so redirect to https
res.redirect('https://' + req.headers.host + req.url);
}
});
答案 1 :(得分:2)
将ExpressJS与NodeJS结合使用时,您可以将app.get
和app.use
用于几个有用的方面。
在初始化let app = express();
之类的应用后,您可以在下面找到一些示例:
正如您正确指出的那样,它对“中间件”很有用,它将应用于所有您指定后缀的GET,POST等。例如,您只能在要“通过用户/通过身份验证”的GET之前使用中间件。
指示文件夹中包含静态内容:app.use(express.static(__dirname + "/public"));
包括用于JSON内容的解析器:app.use(bodyParser.json());
定义“ Cookie Parser”签名字符串:app.use(cookieParser("Signing text example"));
用于URL的单独路由器,位于不同文件中:app.use("/api", apiRouter);
或app.use("/news", newsRouter);
或app.use("/", siteRouter);
对于自定义错误处理程序:app.use(sites404handler);
或app.use(globalErrorHandler);
在谈论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(...)
。例如,这对于定义诸如把手(.hbs文件)之类的视图引擎很有用。
希望这会有所帮助!
答案 2 :(得分:1)
app.get
路由处理程序is applied to GET requests,用于指定路径或所有路径:
使用指定的回调函数将HTTP GET请求路由到指定的路径。
app.use
中间件is applied to all requests,用于指定路径或所有路径:
在指定路径上安装指定的一个或多个中间件函数:当所请求路径的基数与path匹配时,将执行中间件函数。
use
用于将某些逻辑(中间件)应用于特定路由或整个应用程序,而与请求方法无关。