Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 使用前未加载带有ExpressJS服务器环境变量的NextJS_Node.js_Express_Environment Variables_Next.js - Fatal编程技术网

Node.js 使用前未加载带有ExpressJS服务器环境变量的NextJS

Node.js 使用前未加载带有ExpressJS服务器环境变量的NextJS,node.js,express,environment-variables,next.js,Node.js,Express,Environment Variables,Next.js,我有一个带有ExpressJS服务器的NextJS应用程序,用于处理应用程序的某些部分,以进行身份验证。在我尝试使用Sequelize ORM为数据库配置使用env变量之前,应用程序运行没有问题。起初我认为这可能是由于NextJS和ExpressJS同时运行造成的细微差别,但在代码中的不同点进行控制台日志记录之后,我的Sequelize DB config文件似乎正在运行,并在NextJS/ExpressJS从文件中加载环境变量之前设置了环境变量 有人能提供背景说明为什么会这样吗 config/

我有一个带有ExpressJS服务器的NextJS应用程序,用于处理应用程序的某些部分,以进行身份验证。在我尝试使用Sequelize ORM为数据库配置使用env变量之前,应用程序运行没有问题。起初我认为这可能是由于NextJS和ExpressJS同时运行造成的细微差别,但在代码中的不同点进行控制台日志记录之后,我的Sequelize DB config文件似乎正在运行,并在NextJS/ExpressJS从文件中加载环境变量之前设置了环境变量

有人能提供背景说明为什么会这样吗

config/sequelize.js
MyDB配置文件:

console.log("Loading config file")
console.log(process.env.DB_DATABASE) // Returns undefined

module.exports = {
  "development": {
    "username": "username",
    "password": "password",
    "database": process.env.DB_DATABASE, // undefined
    "dialect": "postgres"
  },
}
console.log('server.js - file read')
console.log('process.env.DB_DATABASE: ' + process.env.DB_DATABASE) // Returns undefined

const express = require('express')
const next = require('next')

const dev = process.env.NODE_ENV !== 'production'
const app = next({ dev })
const handle = app.getRequestHandler()
    
app.prepare()
.then(() => {
    const server = express()

    console.log('app.prepare() triggered. Express server configuration started below')
    console.log('process.env.DB_DATABASE: ' + process.env.DB_DATABASE) // Returns "db_template". CORRECT!

    //  Setting proxy for session handlng that is required for non-dev servers
    if (!dev){
        server.set('trust poxy', 1)
    }

    //  ExpressJS Routes
    server.use(routes);

    //  Mount the router on the app 
    //  Any routes that aren't handled by ExpressJS are handled by NextJS
    server.get('*', (req, res) => {
        return handle(req, res)
    })

    server.listen(3000, (err) => {
        if (err) throw err
        console.log('> Ready on http://localhost:3000')
        console.log('Expressjs server listening')
        console.log('process.env.DB_DATABASE: ' + process.env.DB_DATABASE) // Returns "db_template". CORRECT!
    })
})
.catch((ex) => {
    console.error(ex.stack)
    process.exit(1)
})
npm run dev

> next-js-boilerplate@0.1.0 dev /Users/user/dev/nextjs/auth-boilerplate
> nodemon server.js

[nodemon] 2.0.7
[nodemon] reading config ./nodemon.json
[nodemon] to restart at any time, enter `rs`
[nodemon] or send SIGHUP to 81315 to restart
[nodemon] ignoring: ./node_modules/**/* ./.next/**/*
[nodemon] watching path(s): controllers/**/* models/**/* config/**/* libs/**/* ssr-server.js
[nodemon] watching extensions: js,json
[nodemon] starting `node server.js`
[nodemon] forking
[nodemon] child pid: 81317
[nodemon] watching 9 files

server.js - file read
process.env.DB_DATABASE: undefined

Loading config
undefined

Browserslist: caniuse-lite is outdated. Please run:
npx browserslist@latest --update-db
Loaded env from /Users/connorphillips/dev/nextjs/auth-boilerplate/.env
info  - Using external babel configuration from /Users/connorphillips/dev/nextjs/auth-boilerplate/.babelrc
event - compiled successfully

app.prepare() triggered. Express server configuration started below
process.env.DB_DATABASE: email_local


> Ready on http://localhost:3000
Expressjs server listening
process.env.DB_DATABASE: email_local
server.js
mynextjs&ExpressJS服务器:

console.log("Loading config file")
console.log(process.env.DB_DATABASE) // Returns undefined

module.exports = {
  "development": {
    "username": "username",
    "password": "password",
    "database": process.env.DB_DATABASE, // undefined
    "dialect": "postgres"
  },
}
console.log('server.js - file read')
console.log('process.env.DB_DATABASE: ' + process.env.DB_DATABASE) // Returns undefined

const express = require('express')
const next = require('next')

const dev = process.env.NODE_ENV !== 'production'
const app = next({ dev })
const handle = app.getRequestHandler()
    
app.prepare()
.then(() => {
    const server = express()

    console.log('app.prepare() triggered. Express server configuration started below')
    console.log('process.env.DB_DATABASE: ' + process.env.DB_DATABASE) // Returns "db_template". CORRECT!

    //  Setting proxy for session handlng that is required for non-dev servers
    if (!dev){
        server.set('trust poxy', 1)
    }

    //  ExpressJS Routes
    server.use(routes);

    //  Mount the router on the app 
    //  Any routes that aren't handled by ExpressJS are handled by NextJS
    server.get('*', (req, res) => {
        return handle(req, res)
    })

    server.listen(3000, (err) => {
        if (err) throw err
        console.log('> Ready on http://localhost:3000')
        console.log('Expressjs server listening')
        console.log('process.env.DB_DATABASE: ' + process.env.DB_DATABASE) // Returns "db_template". CORRECT!
    })
})
.catch((ex) => {
    console.error(ex.stack)
    process.exit(1)
})
npm run dev

> next-js-boilerplate@0.1.0 dev /Users/user/dev/nextjs/auth-boilerplate
> nodemon server.js

[nodemon] 2.0.7
[nodemon] reading config ./nodemon.json
[nodemon] to restart at any time, enter `rs`
[nodemon] or send SIGHUP to 81315 to restart
[nodemon] ignoring: ./node_modules/**/* ./.next/**/*
[nodemon] watching path(s): controllers/**/* models/**/* config/**/* libs/**/* ssr-server.js
[nodemon] watching extensions: js,json
[nodemon] starting `node server.js`
[nodemon] forking
[nodemon] child pid: 81317
[nodemon] watching 9 files

server.js - file read
process.env.DB_DATABASE: undefined

Loading config
undefined

Browserslist: caniuse-lite is outdated. Please run:
npx browserslist@latest --update-db
Loaded env from /Users/connorphillips/dev/nextjs/auth-boilerplate/.env
info  - Using external babel configuration from /Users/connorphillips/dev/nextjs/auth-boilerplate/.babelrc
event - compiled successfully

app.prepare() triggered. Express server configuration started below
process.env.DB_DATABASE: email_local


> Ready on http://localhost:3000
Expressjs server listening
process.env.DB_DATABASE: email_local
以下是按执行顺序排列的终端输出:

console.log("Loading config file")
console.log(process.env.DB_DATABASE) // Returns undefined

module.exports = {
  "development": {
    "username": "username",
    "password": "password",
    "database": process.env.DB_DATABASE, // undefined
    "dialect": "postgres"
  },
}
console.log('server.js - file read')
console.log('process.env.DB_DATABASE: ' + process.env.DB_DATABASE) // Returns undefined

const express = require('express')
const next = require('next')

const dev = process.env.NODE_ENV !== 'production'
const app = next({ dev })
const handle = app.getRequestHandler()
    
app.prepare()
.then(() => {
    const server = express()

    console.log('app.prepare() triggered. Express server configuration started below')
    console.log('process.env.DB_DATABASE: ' + process.env.DB_DATABASE) // Returns "db_template". CORRECT!

    //  Setting proxy for session handlng that is required for non-dev servers
    if (!dev){
        server.set('trust poxy', 1)
    }

    //  ExpressJS Routes
    server.use(routes);

    //  Mount the router on the app 
    //  Any routes that aren't handled by ExpressJS are handled by NextJS
    server.get('*', (req, res) => {
        return handle(req, res)
    })

    server.listen(3000, (err) => {
        if (err) throw err
        console.log('> Ready on http://localhost:3000')
        console.log('Expressjs server listening')
        console.log('process.env.DB_DATABASE: ' + process.env.DB_DATABASE) // Returns "db_template". CORRECT!
    })
})
.catch((ex) => {
    console.error(ex.stack)
    process.exit(1)
})
npm run dev

> next-js-boilerplate@0.1.0 dev /Users/user/dev/nextjs/auth-boilerplate
> nodemon server.js

[nodemon] 2.0.7
[nodemon] reading config ./nodemon.json
[nodemon] to restart at any time, enter `rs`
[nodemon] or send SIGHUP to 81315 to restart
[nodemon] ignoring: ./node_modules/**/* ./.next/**/*
[nodemon] watching path(s): controllers/**/* models/**/* config/**/* libs/**/* ssr-server.js
[nodemon] watching extensions: js,json
[nodemon] starting `node server.js`
[nodemon] forking
[nodemon] child pid: 81317
[nodemon] watching 9 files

server.js - file read
process.env.DB_DATABASE: undefined

Loading config
undefined

Browserslist: caniuse-lite is outdated. Please run:
npx browserslist@latest --update-db
Loaded env from /Users/connorphillips/dev/nextjs/auth-boilerplate/.env
info  - Using external babel configuration from /Users/connorphillips/dev/nextjs/auth-boilerplate/.babelrc
event - compiled successfully

app.prepare() triggered. Express server configuration started below
process.env.DB_DATABASE: email_local


> Ready on http://localhost:3000
Expressjs server listening
process.env.DB_DATABASE: email_local
执行命令摘要:

console.log("Loading config file")
console.log(process.env.DB_DATABASE) // Returns undefined

module.exports = {
  "development": {
    "username": "username",
    "password": "password",
    "database": process.env.DB_DATABASE, // undefined
    "dialect": "postgres"
  },
}
console.log('server.js - file read')
console.log('process.env.DB_DATABASE: ' + process.env.DB_DATABASE) // Returns undefined

const express = require('express')
const next = require('next')

const dev = process.env.NODE_ENV !== 'production'
const app = next({ dev })
const handle = app.getRequestHandler()
    
app.prepare()
.then(() => {
    const server = express()

    console.log('app.prepare() triggered. Express server configuration started below')
    console.log('process.env.DB_DATABASE: ' + process.env.DB_DATABASE) // Returns "db_template". CORRECT!

    //  Setting proxy for session handlng that is required for non-dev servers
    if (!dev){
        server.set('trust poxy', 1)
    }

    //  ExpressJS Routes
    server.use(routes);

    //  Mount the router on the app 
    //  Any routes that aren't handled by ExpressJS are handled by NextJS
    server.get('*', (req, res) => {
        return handle(req, res)
    })

    server.listen(3000, (err) => {
        if (err) throw err
        console.log('> Ready on http://localhost:3000')
        console.log('Expressjs server listening')
        console.log('process.env.DB_DATABASE: ' + process.env.DB_DATABASE) // Returns "db_template". CORRECT!
    })
})
.catch((ex) => {
    console.error(ex.stack)
    process.exit(1)
})
npm run dev

> next-js-boilerplate@0.1.0 dev /Users/user/dev/nextjs/auth-boilerplate
> nodemon server.js

[nodemon] 2.0.7
[nodemon] reading config ./nodemon.json
[nodemon] to restart at any time, enter `rs`
[nodemon] or send SIGHUP to 81315 to restart
[nodemon] ignoring: ./node_modules/**/* ./.next/**/*
[nodemon] watching path(s): controllers/**/* models/**/* config/**/* libs/**/* ssr-server.js
[nodemon] watching extensions: js,json
[nodemon] starting `node server.js`
[nodemon] forking
[nodemon] child pid: 81317
[nodemon] watching 9 files

server.js - file read
process.env.DB_DATABASE: undefined

Loading config
undefined

Browserslist: caniuse-lite is outdated. Please run:
npx browserslist@latest --update-db
Loaded env from /Users/connorphillips/dev/nextjs/auth-boilerplate/.env
info  - Using external babel configuration from /Users/connorphillips/dev/nextjs/auth-boilerplate/.babelrc
event - compiled successfully

app.prepare() triggered. Express server configuration started below
process.env.DB_DATABASE: email_local


> Ready on http://localhost:3000
Expressjs server listening
process.env.DB_DATABASE: email_local
  • 已读取server.js文件
  • 已读取config/sequelize.js文件
  • 从.env.development加载的环境
  • 已触发server.js app.prepare()
  • 已触发server.js server.listen()

我遇到了同样的问题

在执行app.prepare()之前,将初始化代码顶部导入的模块。
我认为您的
config/sequelize.js
是从
“routes”
模块导入的

我的解决方法是将
“路由”
导入app.prepare().then()

app.prepare()
.然后(()=>{
...
//ExpressJS路线
//使用require,因为javascirpt导入已挂起。
使用(require('./您的路由路径');//如果使用module.exports
使用(require('./您的路由路径').default);//如果使用导出默认值
...
})

正在使用的
config/sequelize.js
在哪里?Hey@juliomalves它正在我的sequelize ORM索引模型文件中使用,并传递给sequelize包的新实例
new sequelize(config.database,…)。这就是问题所在,因为它启动Sequelize并抛出一个错误,表示没有传递值