如何修复Mojo.js启动时出现的"username is required"错误?
问题
启动Mojo.js项目时触发username is required错误,无法在8080端口正常启动服务。
我的package.json中的dev命令:
"dev": "NODE_ENV=development nodemon -e 'js,tmpl,css,yml' ./index.js server -l 'http://*:8080'"
index.js核心代码片段(数据库连接相关):
import mojo, { yamlConfigPlugin } from '@mojojs/core'; import Surreal from 'surrealdb.js'; import dotenv from 'dotenv-flow'; dotenv.config(); export const app = mojo(); const { DB_USER, DB_PASS, DB_NS, DB_DB } = process.env; app.addAppHook('app:start', async (app) => { if (!app.models.db) { app.models.db = new Surreal('http://127.0.0.1:9021/rpc'); await app.models.db.signin({ user: DB_USER, pass: DB_PASS }); await app.models.db.use(DB_NS, DB_DB); } // 其他模型初始化代码 }); // 路由及其他代码 app.start();
解决方案
这个错误是因为SurrealDB的signin方法未获取到有效用户名(DB_USER为空),按以下步骤排查修复:
检查.env配置文件
确保项目根目录存在.env或.env.development文件,且包含完整数据库配置:DB_USER=你的数据库用户名 DB_PASS=你的数据库密码 DB_NS=命名空间 DB_DB=数据库名称dotenv-flow会优先加载对应环境的配置文件,开发环境下优先读取.env.development,不存在则回退到.env。验证环境变量加载情况
在dotenv.config()后添加日志,确认变量是否被正确读取:dotenv.config(); console.log('DB_USER:', process.env.DB_USER); // 查看输出是否为空若输出为空,检查
.env文件路径是否在项目根目录,或文件名是否符合dotenv-flow规则。修复跨平台环境变量传递
Windows环境下NODE_ENV=development写法不兼容,需修改命令:"dev": "set NODE_ENV=development && nodemon -e 'js,tmpl,css,yml' ./index.js server -l 'http://*:8080'"或使用
cross-env统一跨平台设置:- 安装依赖:
npm install cross-env --save-dev - 修改命令:
"dev": "cross-env NODE_ENV=development nodemon -e 'js,tmpl,css,yml' ./index.js server -l 'http://*:8080'"
- 安装依赖:
添加变量缺省值
为环境变量设置缺省值,避免空值传递给SurrealDB:const DB_USER = process.env.DB_USER || 'root'; // 按你的SurrealDB默认配置调整 const DB_PASS = process.env.DB_PASS || 'root'; const DB_NS = process.env.DB_NS || 'test'; const DB_DB = process.env.DB_DB || 'test';确认SurrealDB服务状态
确保SurrealDB服务已在http://127.0.0.1:9021正常启动,且配置的用户名/密码在数据库中存在(默认用户名密码为root/root)。
内容的提问来源于stack exchange,提问作者chovy
相关产品推荐
相关产品推荐

