You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行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,可以做以下操作之一:

    1. 将server.js的后缀改成.mjs,然后用node server.mjs运行;
    2. 在项目根目录的package.json里添加"type": "module"字段,然后正常运行node server.js。
      注意:Node.js 9.x的ES模块特性还是实验性的,可能存在兼容性问题,生产环境不建议使用。
  • 用Babel转译ES6语法
    如果你需要大量使用ES6+特性,可以通过Babel来转译:

    1. 安装依赖:
      npm install --save-dev @babel/core @babel/node @babel/preset-env
      
    2. 在项目根目录创建.babelrc文件,内容如下:
      {
        "presets": ["@babel/preset-env"]
      }
      
    3. 用babel-node代替node运行文件:
      npx babel-node server.js
      

接下来处理MongoDB的两个问题:

1. 启动警告(访问控制+透明大页)

启用访问控制

MongoDB提示未启用访问控制,这意味着任何连接到服务器的用户都能操作数据库,存在安全风险,解决步骤:

  1. 先停止MongoDB服务:
    sudo systemctl stop mongod
    
  2. 修改MongoDB配置文件(通常路径是/etc/mongod.conf),找到security部分,添加authorization: enabled:
    security:
      authorization: enabled
    
  3. 启动MongoDB服务:
    sudo systemctl start mongod
    
  4. 进入MongoDB shell,创建管理员用户:
    mongo
    
    然后执行:
    use admin
    db.createUser({
      user: "adminUser",
      pwd: "yourStrongPassword",
      roles: [{ role: "root", db: "admin" }]
    })
    
    之后退出shell,下次连接就需要用这个管理员账号登录:mongo -u adminUser -p yourStrongPassword --authenticationDatabase admin

修复透明大页设置

透明大页会影响MongoDB的性能,按照提示改成never:

  1. 临时生效(重启服务器后失效):
    echo never | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
    echo never | sudo tee /sys/kernel/mm/transparent_hugepage/defrag
    
  2. 永久生效:
    编辑/etc/sysctl.conf文件,添加以下内容:
    vm.nr_hugepages = 0
    
    然后执行sudo 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:16:07