gpt4 book ai didi

javascript - 如何将全局对象从 NodeJS 传递到 View 并访问数据?

转载 作者:行者123 更新时间:2023-12-02 22:28:37 25 4
gpt4 key购买 nike

我正在 Node.js/Express 中使用 global 对象来设置一些我需要在 View 中使用的应用程序范围的变量。问题是它看起来不像我习惯的 JSON 数据,并且我不确定如何从 View 访问 global 对象中的变量。

这是我执行 console.log(global) 时的 global 对象:

    Object [global] {
global: [Circular],
clearInterval: [Function: clearInterval],
clearTimeout: [Function: clearTimeout],
setInterval: [Function: setInterval],
setTimeout: [Function: setTimeout] { [Symbol(util.promisify.custom)]: [Function] },
queueMicrotask: [Function: queueMicrotask],
clearImmediate: [Function: clearImmediate],
setImmediate: [Function: setImmediate] {
[Symbol(util.promisify.custom)]: [Function]
},
MYDB_Config: { // sql server config
server: 'localhost',
database: 'MyDB',
options: { trustedConnection: true }
},
MSSQL_MYDB: ConnectionPool { // sql server connectionPool
_events: [Object: null prototype] {},
_eventsCount: 0,
_maxListeners: undefined,
_connected: false,
_connecting: false,
_healthy: false,
config: {
server: 'localhost',
database: 'MYDB',
options: [Object],
port: 1433,
stream: false,
parseJSON: false,
requestTimeout: 15000
},
pool: null
},
ContentURL: 'https://static.domain.ext', // my global variables to use in a view
S3URL: 'https://s3.amazon.com',
RootPath: 'F:\\Project\\Web\\NodeJS'
}

我将 global 传递给我的 View ,如下所示:

res.render('index', {pagetitle: 'Homepage', data, global});

在我看来(Handlebars),如何从 global 访问 ContentURL 值?这样做没有任何作用:

{{global.ContentURL}}

如果我只是按照我的观点做以下事情:

{{global}}

然后我在网页上打印了[object global]

我想我必须将 global 对象转换为 JSON,但我不确定,也不知道该怎么做。任何指点真的很感激:)

最佳答案

您应该只将 View 中需要的那些变量传递给 View 。污染全局命名空间是一个坏主意。如果您想在所有/大多数 View 中使用变量,请考虑执行以下操作:

renderHelper.js:

const renderHelper = function(res, template, params) {
params = params || {}
return res.render(template, {
ContentUrl: 'something, not a property of global',
/* other 'global' variables */
...params
})
}

module.exports = renderHelper

渲染时:

renderHelper(res, 'index', {pagetitle: 'Homepage', data});

它的作用是允许您将特定于 View 的变量传递给模板,并且仍然可以让所有 View 访问应用程序范围的变量。这是一种更语义化的方法,因为您可以立即知道将出现哪些 View 变量(未隐藏在某些全局对象中),因此不依赖渲染周期之外的代码来声明它们。

关于javascript - 如何将全局对象从 NodeJS 传递到 View 并访问数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58980653/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com