Nodejs express里面的app.configure作用

Nodejs express里面的app.configure作用

看了官方文档还是没看懂 app.set放在外面和放在app.configure里面有什么区别

5 回复

Node.js Express 里面的 app.configure 作用

在 Express 中,app.configure 是一个用于配置应用设置的便捷方法。它通常用于将一些初始化或配置代码组织在一起,以便于管理和维护。尽管在较新的版本中 app.configure 已经被弃用,但在旧版本中它仍然被广泛使用。

示例代码

const express = require('express');
const app = express();

// 使用 app.configure 配置中间件
app.configure(() => {
    app.use(express.json()); // 解析 JSON 请求体
    app.use(express.urlencoded({ extended: true })); // 解析 URL 编码的请求体
});

// 设置模板引擎
app.set('view engine', 'ejs');

// 路由定义
app.get('/', (req, res) => {
    res.send('Hello World!');
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

app.set 放在外面和放在 app.configure 里面的区别

  1. 放外面

    • 如果你直接在应用的顶层使用 app.set,那么这些设置会在应用启动时立即生效。
    • 这种方式简单直接,适用于不需要条件判断的静态配置。
    const express = require('express');
    const app = express();
    
    // 直接设置模板引擎
    app.set('view engine', 'ejs');
    
    // 其他配置
    app.use(express.json());
    app.use(express.urlencoded({ extended: true }));
    
    app.get('/', (req, res) => {
        res.send('Hello World!');
    });
    
    app.listen(3000, () => {
        console.log('Server is running on port 3000');
    });
    
  2. 放在 app.configure 里面

    • 将配置放在 app.configure 里面可以让你根据某些条件动态地应用这些配置。
    • 这种方式使得代码更加模块化和可维护,尤其是在需要根据不同环境(如开发、测试、生产)进行不同配置时。
    const express = require('express');
    const app = express();
    
    // 使用 app.configure 来配置中间件
    app.configure(() => {
        app.use(express.json());
        app.use(express.urlencoded({ extended: true }));
        app.set('view engine', 'ejs'); // 设置模板引擎
    });
    
    app.get('/', (req, res) => {
        res.send('Hello World!');
    });
    
    app.listen(3000, () => {
        console.log('Server is running on port 3000');
    });
    

总结

  • 使用 app.configure 可以让你将配置逻辑组织在一起,便于管理和维护。
  • 在较新的版本中,推荐使用中间件函数来替代 app.configure,因为后者已经被弃用。
  • 如果你需要根据不同的环境或条件进行配置,可以考虑使用 app.configure 或者在应用的顶层使用条件语句。

希望这个解释和示例代码能帮助你更好地理解 app.configure 的作用及其与 app.set 的区别。


以下摘自 express 3.0 的 文档

app.configure([env], callback)

Conditionally invoke callback when env matches app.get(‘env’), aka process.env.NODE_ENV. This method remains for legacy reason, and is effectively an if statement as illustrated in the following snippets. These functions are not required in order to use app.set() and other configuration methods.

里面说 app.configure 是以前的版本遗留下来的,完全可以用条件判断语法取代。

文档里还举例说明了:

app.configure(function() {
  app.set('title', 'My Application');
});

app.set('title', 'My Application');

是等价的,都是对所有环境有效。而

app.configure('development', function(){
  app.set('db uri', 'localhost/dev');
})

if ('development' == app.get('env')) {
  app.set('db uri', 'localhost/dev');
}

是一个效果。

非常感谢!

app.configure 是 Express.js 中的一个方法,用于配置应用的中间件和其他设置。不过,在较新的版本(4.x 及以上)中,app.configure 已经被移除,通常使用简单的 app.use()app.set() 来进行配置。

app.set() 方法用于设置应用级别的变量或配置选项。你可以将其放在任何地方,但通常它会放在路由定义之前,以确保在处理请求时这些配置已经就绪。

示例代码

假设你想设置模板引擎和视图目录:

const express = require('express');
const app = express();

// 使用 ejs 模板引擎
app.set('view engine', 'ejs');

// 设置视图目录
app.set('views', './views');

// 路由定义
app.get('/', (req, res) => {
    res.render('index'); // 渲染 views 目录下的 index.ejs 文件
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

app.set 放在 app.configure 里面与外面的区别

在旧版本的 Express.js(如 3.x 版本),你可以这样写:

const express = require('express');
const app = express();

// 使用 app.configure 进行配置
app.configure(() => {
    // 设置模板引擎
    app.set('view engine', 'ejs');
    
    // 设置视图目录
    app.set('views', './views');
});

app.get('/', (req, res) => {
    res.render('index'); // 渲染 views 目录下的 index.ejs 文件
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

区别

  1. 代码组织

    • 在旧版本中,使用 app.configure 可以将配置逻辑集中在一起,使代码更整洁。
    • 新版本中,直接使用 app.set() 更为简洁明了。
  2. 灵活性

    • 使用 app.configure 时,可以有条件地执行某些配置。
    • 现在可以直接在不同的上下文中调用 app.set()

总结来说,虽然 app.configure 在新版本中已不再推荐使用,但它在旧版本中的确提供了更清晰的配置方式。现在的最佳实践是直接使用 app.set(),并将这些设置放在路由定义之前。

回到顶部