加载引入Mongoose的文件后Node陷入循环的原因排查
Node REPL加载Mongoose文件时循环打印的解决方法
当你在Node REPL中使用.load .index.js命令时出现循环打印const mongoose = require('mongoose');的问题,主要是因为REPL的.load命令在处理包含异步连接逻辑的文件时行为异常,加上课程内容可能基于旧版Node,和当前版本不兼容。
以下是几个可行的解决办法:
改用REPL启动参数加载文件
直接用node -r ./index.js命令启动REPL,这个命令会先加载你的index.js文件并执行代码,然后进入REPL环境,你可以直接使用文件中定义的Movie模型等变量,不会出现循环打印的问题。直接运行文件而非加载到REPL
如果不需要进入REPL,只是想验证数据库连接是否成功,直接在终端执行node index.js即可,终端会输出连接成功或错误信息。修改文件方便REPL导入
在你的代码末尾添加一行module.exports = { Movie };,然后在REPL中用const { Movie } = require('./index.js')导入,这样可以避免.load命令带来的问题。
你的代码本身没有语法错误,调整加载方式就能解决问题,修改后的代码示例:
const mongoose = require('mongoose'); mongoose.set('strictQuery', false); mongoose.connect('mongodb://127.0.0.1:27017/movieApp') .then(() => { console.log("connection open!"); }) .catch(err => { console.log("oh no, error!"); console.log(err); }) const movieSchema = new mongoose.Schema( { title: String, year: Number, score: Number, rating: String }) const Movie = mongoose.model('Movie', movieSchema); module.exports = { Movie }; // 添加这行方便在REPL中导入使用
内容的提问来源于stack exchange,提问作者Kyle
相关产品推荐
相关产品推荐

