如何在Next.js中使用module.exports

安东尼奥·帕维切瓦茨·奥尔蒂斯

在我next.js的应用程序,我想揭露这个env在我的对象next.config.js下面这个处方到我的应用程序;

//next.config.js

const withCSS = require('@zeit/next-css');

module.exports = withCSS({
  webpack(config) {
    config.module.rules.push({
      test: /\.(eot|woff|woff2|ttf|svg|png|jpg|gif)$/,
      use: {
        loader: 'url-loader',
        options: {
          limit: 100000,
          name: '[name].[ext]'
        }
      }
    });
    return config;
  }
});

  //trying to expose the env {} below

    module.exports = {
      env: {
        DEVELOPMENT_DB_DSN: 'mongodb+srv://antonioHillfinder:[email protected]/development?retryWrites=true&w=majority',
        PRODUCTION_DB_DSN: 'mongodb+srv://antonioHillfinder:[email protected]/production?retryWrites=true&w=majority',
        TEST_DB_DSN: 'mongodb+srv://antonioHillfinder:[email protected]/test?retryWrites=true&w=majority'
      }
    };

我也尝试过这个:

var withCSS = require('@zeit/next-css');


module.exports = {
  withCSS: withCSS({
    webpack(config) {
      config.module.rules.push({
        test: /\.(eot|woff|woff2|ttf|svg|png|jpg|gif)$/,
        use: {
          loader: 'url-loader',
          options: {
            limit: 100000,
            name: '[name].[ext]'
          }
        }
      });
      return config;
    }
  }),
  env: {
    DEVELOPMENT_DB_DSN: `mongodb+srv://antonioHillfinder:[email protected]/development?retryWrites=true&w=majority`,
    PRODUCTION_DB_DSN: `mongodb+srv://antonioHillfinder:[email protected]/production?retryWrites=true&w=majority`,
    TEST_DB_DSN: `mongodb+srv://antonioHillfinder:[email protected]/test?retryWrites=true&w=majority`
  }
};

我正在尝试在这里使用它们:

var express = require('express')
var next = require('next')
var session = require('express-session')
var MongoStore = require('connect-mongo')(session)
var cookieParser = require('cookie-parser')
var bodyParser = require('body-parser')
var cors = require('cors')
var morgan = require('morgan')
var HttpStatus = require('http-status-codes')

var PORT = process.env.PORT || 8016
var dev = process.env.NODE_ENV !== `production`;

function processNODEENVCheckerAndServerRuntimeConfigSetter(ENV) {
  var environment,
    environments = {
      'production': () => {
        environment = process.env.PRODUCTION_DB_DSN; //trying to use them here
        return environment;
      },
      'test': () => {
        environment = process.env.TEST_DB_DSN; //trying to use them here
        return environment;
      },
      'default': () => {
        environment = process.env.DEVELOPMENT_DB_DSN; //trying to use them here
        console.log("environment ", environment);
        return environment;
      },
    };
  (environments[ENV] || environments['default'])();

  return environment
}

var db = processNODEENVCheckerAndServerRuntimeConfigSetter(process.env.NODE_ENV)

var NextApp = next({ dev })
var handle = NextApp.getRequestHandler()

var mongoose = require('mongoose')

NextApp.prepare()
  .then(() => {
    const app = express()
    mongoose.connect(db, { useNewUrlParser: true })
    mongoose.Promise = global.Promise

    mongoose.connection
      .on('connected', () => {
        console.log(`Mongoose connection open on ${db}`)
      })
      .on('error', err => {
        console.log(`Connection error: ${err.message}`)
      })

    app.use(bodyParser.json())
    app.use(bodyParser.urlencoded({ extended: true }))
    app.use(morgan('dev'))

    app.use(cookieParser())

    session({
      secret: 'very secret 12345',
      resave: true,
      saveUninitialized: false,
      store: new MongoStore({ mongooseConnection: mongoose.connection })
    })

    app.use(cors())

    app.use('/auth', require('./auth'))

    app.get('*', (req, res) => {
      return handle(req, res)
    })

    app.use(errorHandler, function (error, req, res, next) {
      res.json({ message: error.message })
    })

    app.listen(PORT, err => {
      if (err) throw err
      console.log(`> Ready on http://localhost:${PORT}`)
    })
  })
  .catch(err => {
    console.error(err)
  })

最后,应用程序坏了,我得到了这个错误...

environment  undefined

Compiled successfully!

Note that pages will be compiled when you first load them.
{ MongooseError: The `uri` parameter to `openUri()` must be a string, got "undefined". Make sure the first parameter to `mongoose.connect()` or `mongoose.createConnection()` is a string.
    at new MongooseError (/Users/antoniopavicevac-ortiz/Dropbox/developer_folder/hillfinder/node_modules/mongoose/lib/error/mongooseError.js:10:11)
    at NativeConnection.Connection.openUri (/Users/antoniopavicevac-ortiz/Dropbox/developer_folder/hillfinder/node_modules/mongoose/lib/connection.js:519:11)
    at Mongoose.connect (/Users/antoniopavicevac-ortiz/Dropbox/developer_folder/hillfinder/node_modules/mongoose/lib/index.js:314:15)
    at NextApp.prepare.then (/Users/antoniopavicevac-ortiz/Dropbox/developer_folder/hillfinder/server/index.js:68:14)
    at process._tickCallback (internal/process/next_tick.js:68:7)
  message:
   'The `uri` parameter to `openUri()` must be a string, got "undefined". Make sure the first parameter to `mongoose.connect()` or `mongoose.createConnection()` is a string.',
  name: 'MongooseError' }
[nodemon] clean exit - waiting for changes before restart

不知道为什么我得到undefined来自console.log("environment ", environment);var db = processNODEENVCheckerAndServerRuntimeConfigSetter(process.env.NODE_ENV) 声明/功能

史蒂夫·霍尔加多

使用next.config.js中env选项将仅在构建时使环境变量可用。

要使环境变量可用于服务器,可以将环境变量放在.env项目根目录下文件中:

DEVELOPMENT_DB_DSN="mongodb+srv://antonioHillfinder:[email protected]/development?retryWrites=true&w=majority"
PRODUCTION_DB_DSN="mongodb+srv://antonioHillfinder:[email protected]/production?retryWrites=true&w=majority"
TEST_DB_DSN="mongodb+srv://antonioHillfinder:[email protected]/test?retryWrites=true&w=majority"

然后,您可以使用dotenv软件包加载它:

https://www.npmjs.com/package/dotenv

npm i dotenv

...并将其添加到服务器文件的顶部:

require('dotenv').config()

之后,环境变量将在服务器上可用。




注意,next.config.js中env选项是在构建期间使环境变量可用,并且可以这样使用:

// next.config.js

const withCSS = require('@zeit/next-css');

module.exports = withCSS({
  webpack(config) {
    // ...
    return config;
  },
  env: {
    // ...
  }
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Node JS中使用module.exports导出数组?

如何导入在Typescript中使用module.exports =的CommonJS模块

如何在nodeJS中使用module.exports请求.json文件

如何在module.exports函数中使用d3返回数据?

如何在 node 中使用 sinon 为 module.exports 和原型编写单元测试

如何在 node.js 中正确使用 module.exports?

如何在“module.exports”中导出多个参数?

如何从module.exports导出对象?

module.exports = function() 如何调用

如何从函数内部修改module.exports?

如何从module.exports访问函数

如何使用module.exports和require()导出Node.js中的类和超类?

Node.js module.exports的用途是什么,如何使用它?

如何使用Azure Functions和node.js在module.exports之外发出axios请求?

如何在Node.js中引用module.exports内部的变量

JS-如何在同一文件中访问module.exports函数

如何在Next js中使用websockets

如何在 JavaScript ES5 中使用“exports”导出单个变量(计数器)

如何扩展一个 node_module 文件,module.exports 只导出几个变量,但在整个模块中使用?(带示例)

module.exports从诺言

在节点module.exports中的对象方法中使用'this'

在茉莉花规格中使用module.exports

在React ES6中使用module.exports

在 module.exports 中使用的函数中未定义

如何使打字稿导出与 module.exports 向后兼容

“ module.exports = {__dirname}”如何工作,为什么工作?

如何从 axios 获取数据到 module.exports

如何访问module.exports中的对象属性

如何将 .then() 函数的响应放在 module.exports 中?