需要先初始化 Node.js 项目,并安装 express、bcryptjs、jsonwebtoken、mongoose、dotenv 等核心依赖;随后配置 .env 文件,创建 User 用户模型并完成密码加密处理,编写 /register 和 /login 接口路由,连接 MongoDB 数据库后再启动服务。

如果想在 Cursor 中快速搭建一个具备基础登录与注册功能的 Node.js 后端项目,需要完整走通从项目初始化、依赖安装、接口路由编写、数据库配置到服务启动的全过程。整个方案无需前端页面配合,只需借助 Postman 或 curl 测试 API 接口,就可以完成验证与运行。
初始化项目并安装核心依赖
首先打开终端,进入目标目录后执行 npm init -y 生成 package.json,然后继续运行 npm install express bcryptjs jsonwebtoken mongoose dotenv 安装 Node.js 登录注册功能所需的核心依赖。其中几个包尤为重要:【bcryptjs 用于密码哈希加密,jsonwebtoken 用于生成和校验 JWT Token,mongoose 用于连接 MongoDB 数据库】,缺少任何一个都会影响后续登录认证流程。
接着创建 .env 文件,写入 MONGODB_URI=mongodb://127.0.0.1:27017/authdb 和 JWT_SECRET=your_strong_secret_key_here。需要特别注意的是,JWT_SECRET 必须设置为足够复杂且随机的长字符串,不能直接使用弱默认值,否则生成的 token 存在被伪造的安全风险。
建立用户模型(User Schema)
在项目根目录下新建 models/User.js 文件:
导入 mongoose → 定义 schema,包含 email(唯一索引)、password(不直接存储明文密码)、createdAt 字段 → 对 password 字段添加 pre('sa ve') 中间件,调用 bcryptjs.hash() 进行加密 → 最后导出 model。
这一步是 Node.js 用户认证开发中的关键环节,如果跳过密码加密逻辑,用户密码将以明文方式写入数据库,不仅存在严重安全隐患,也不符合常见后端开发规范。
编写注册接口
方法一:使用 Express Router 拆分独立路由文件
接下来新建 routes/auth.js,先引入 express.Router(),然后定义一个 POST /register 注册接口。该接口接收到请求后,会从 req.body 中解构出 email 和 password,随后先查询数据库,确认当前 email 是否已被注册。如果不存在重复用户,就调用 User.create() 创建新账号,最后返回 { success: true, message: '注册成功' }。
方法二:内联写法(适合快速测试接口)
也可以在 app.js 中直接编写 app.post('/register', async (req, res) => { ... }),实现逻辑与上面一致。这种方式适合快速验证 Node.js 注册功能是否可用,但从代码组织和后期维护角度来看,并不适合长期项目使用。
实现登录逻辑并返回Token
第一步:在 auth.js 路由文件中新增 POST /login 登录接口
第二步:通过 email 查询用户 → 如果用户不存在,则返回 401 错误;如果查询到用户,则使用 bcryptjs.compare() 校验密码 → 当密码验证通过后,调用 jwt.sign() 生成 JWT token,payload 至少应包含 user._id 和 email → 同时设置 token 过期时间为 24 小时 → 最终返回 { token }。
第三步:确保响应中不使用 HttpOnly Cookie(本示例采用纯 API 接口模式),而是仅通过 JSON 直接返回 token 字符串。前端或调用方需要自行保存该 token,并在后续请求的 Authorization 请求头中携带 Bearer token 完成身份认证。
如果这一步遗漏了 await,或者没有妥善处理异步异常,就很容易导致 Node.js 服务报错、接口返回空 token,甚至引发服务器崩溃。
挂载路由并启动服务
在 app.js 中:引入 express → 调用 express() 创建应用实例 → 使用 app.use(express.json()) 和 app.use(express.urlencoded({ extended: true })) 解析请求体数据 → 执行 dotenv.config() 加载环境变量 → 连接 MongoDB(mongoose.connect())→ 挂载认证路由:app.use('/api', require('./routes/auth')) → 最后监听 3000 端口启动服务。
执行 node app.js 启动 Node.js 服务后,可通过 curl 或 Postman 向 http://localhost:3000/api/register 发送 POST 请求,并携带 JSON body:{"email":"test@example.com","password":"123456"} → 如果成功返回响应结果,即表示注册接口已经正常可用,整个登录注册后端基础流程也已搭建完成。
