javascript - Node : Middleware for only page loading

标签 javascript node.js express

我正在使用 nodejs 和 ejs 模板。我想设置一个仅在页面加载时调用的中间件,而不是在我从代码发送请求时调用。

例子:

app.use(function(req, res, next){
    if(req.session){
        console.log("OKAY");
    } 
    next();
});

我希望这个日志只出现在页面加载时,而不是当我从下面的代码发送请求时

$.get( "/users", function( data ) {
    console.log(data);
});

我该怎么做?

谢谢

最佳答案

你有几个选择:

  1. 在你的中间件中,你可以检查req.path查看它是否是您应该应用中间件的路径,并在您的中间件中使用 if 来调用 next() 而不做任何事情或做任何事情中间件旨在执行此操作。

  2. 您可以设计页面路由和 ajax 路由在不同路径上的路由,然后为页面路由设计一个路由器,为 ajax 路由设计一个路由器,并将中间件仅放在页面路由器上。

如果您设计您的 URL,那么您的服务器很容易区分这是一个应该或不应该应用中间件的 URL,这真的会对您有很大帮助(使用上述任一选项)。通常,最简单的方法是在 URL 设计的一个或两个分支上使用已知前缀。例如,所有 ajax URL 都可以以 /api 开头,然后您可以轻松地将所有 API 调用分流到一个特殊的路由器,所有其他 URL 都是非 API URL(可能是页面 URL)。

这是单独的 API 路由器的示例:

// split off all API calls to a separate router
let apiRouter = express.Router();
app.use('/api', apiRouter);

// handle /api/users
apiRouter.get('/users', handleUserAjaxRequest);

// handle all other /api/xxx routes that don't have their own handler
apiRouter.use(function(req, res, next) {
    // if /api request not handled by here, then don't allow it to propagate further
    // it must be a invalid /api/xxx URL, so do a 404
    res.status(404).end();
});

// this won't get called if there's a /api/xxx URL because that will have
// already been handled by the apiRouter
app.use(someMiddleware);

app.get('/somepage', handleSomePageURL);

您还可以为所有页​​面请求使用单独的路由器,这可能会使模块化更加清晰,一个模块中的所有 API 路由和另一个模块中的所有页面路由,每个都导出自己的路由器。

关于javascript - Node : Middleware for only page loading,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46064839/

相关文章:

javascript 倒计时器,包含周和月

javascript - 使用 nodejs 和 pug 的客户端模板

javascript - 如果我发送正文中包含 json 的请求,Cors 会出现问题

javascript - 如何在 Cloud Functions for Firebase 上使用 express 执行 HTTP 文件上传(multer,busboy)

node.js - 在 Node.JS 和 Express 中拦截 HTTPS 服务器上的 HTTP 响应

javascript - 如何在react-native中使用thunk?

javascript - 在 QML 中委托(delegate)一个数组

javascript - 寻找与当前正在进行的组合最接近的组合

Javascript 图像预加载无法正常工作

node.js - 如何使用 Mongoose 制作模式给定输出?