运行Node.js服务器报错及MongoDB相关问题求助
解决Node.js语法错误与MongoDB警告/文件问题
先搞定你遇到的Node.js语法错误:
问题原因
Node.js 9.4版本默认不支持ES6的import模块语法,它默认采用CommonJS的require语法,所以直接写import会触发语法错误。
解决办法(按推荐程度排序)
最直接:改用CommonJS语法
把server.js里的import mongoose from 'mongoose';改成:const mongoose = require('mongoose');这是最稳妥的方式,不需要额外配置,直接兼容Node.js 9.x版本。
启用ES模块实验特性(不推荐生产环境)
如果你非要用import,可以做以下操作之一:- 将
server.js的后缀改成.mjs,然后用node server.mjs运行; - 在项目根目录的
package.json里添加"type": "module"字段,然后正常运行node server.js。
注意:Node.js 9.x的ES模块特性还是实验性的,可能存在兼容性问题,生产环境不建议使用。
- 将
用Babel转译ES6语法
如果你需要大量使用ES6+特性,可以通过Babel来转译:- 安装依赖:
npm install --save-dev @babel/core @babel/node @babel/preset-env - 在项目根目录创建
.babelrc文件,内容如下:{ "presets": ["@babel/preset-env"] } - 用babel-node代替node运行文件:
npx babel-node server.js
- 安装依赖:
接下来处理MongoDB的两个问题:
1. 启动警告(访问控制+透明大页)
启用访问控制
MongoDB提示未启用访问控制,这意味着任何连接到服务器的用户都能操作数据库,存在安全风险,解决步骤:
- 先停止MongoDB服务:
sudo systemctl stop mongod - 修改MongoDB配置文件(通常路径是
/etc/mongod.conf),找到security部分,添加authorization: enabled:security: authorization: enabled - 启动MongoDB服务:
sudo systemctl start mongod - 进入MongoDB shell,创建管理员用户:
然后执行:mongo
之后退出shell,下次连接就需要用这个管理员账号登录:use admin db.createUser({ user: "adminUser", pwd: "yourStrongPassword", roles: [{ role: "root", db: "admin" }] })mongo -u adminUser -p yourStrongPassword --authenticationDatabase admin
修复透明大页设置
透明大页会影响MongoDB的性能,按照提示改成never:
- 临时生效(重启服务器后失效):
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/enabled echo never | sudo tee /sys/kernel/mm/transparent_hugepage/defrag - 永久生效:
编辑/etc/sysctl.conf文件,添加以下内容:
然后执行vm.nr_hugepages = 0sudo sysctl -p生效,之后重启MongoDB服务:sudo systemctl restart mongod
2. .dbshell文件不存在错误
这个错误是因为MongoDB尝试加载用户目录下的.dbshell文件保存命令历史,但文件不存在,直接创建即可:
touch /home/ranjit/.dbshell chmod 600 /home/ranjit/.dbshell
创建后再启动MongoDB shell就不会报错了。
内容的提问来源于stack exchange,提问作者Ranjit
相关产品推荐
相关产品推荐

