javascript - 为什么我的代码会抛出错误?

标签 javascript node.js express mongoose

我得到一个 module.js:339 throw err;

我不确定哪一行或哪里可以修复它。如果我能找到正确的方向,我想我就能解决这个问题。我正在寻找错误的信息,但我似乎无法弄清楚为什么、如何以及如何修复该错误。

var bodyParser = require('body-parser');
var express = require('express');
var mongoose = require('mongoose');

var Schema = mongoose.Schema;
var ObjectId = Schema.ObjectId;

var User = mongoose.model('User', new Schema({
	id: ObjectId,
	firstName: String,
	lastName: String,
	email: { type: String, unique: true },
	password: String,
}));

var app = express();
app.set('view engine', 'jade');
app.locals.pretty = true;

// conenct to mongo
mongoose.connect('mongodb://localhost/auth');

// middleware
app.use(bodyParser.urlencoded({ extended: true }));

app.get('/', function(req, re6s) {
	res.render('index.jade');
});

app.get('/register', function(req, res) {
	res.render('register.jade');
});

app.post('/register', function(req, res) {
	var user = new User({
		firstName: req.body.firstName,
		lastName: req.body.lastName,
		email: req.body.email,
		password: req.body.password
	});
	user.save(function(err) {
		if (err) {
			var err = "Something bad happened! Try again!";
			if (err.code === 11000) {
				error = "That email is already taken. Try another.";
			}
			res.render("register.jade", { error: error });
		} else {
			res.redirect("/dashboard");
		}
	});
});

app.get('/login', function(req, res) {
	res.render('login.jade');
});

app.get('/dashboard', function(req, res) {
	res.render('dashboard.jade');
});

app.get('/logout', function(req, res) {
	res.redirect('/');
});

app.listen(3000);

完整的错误消息:

>node app.js
module.js:339
    throw err;
    ^

Error: Cannot find module 'express'
    at Function.Module._resolveFilename (module.js:337:15)
    at Function.Module._load (module.js:287:25)
    at Module.require (module.js:366:17)
    at require (module.js:385:17)
    at Object.<anonymous> (C:\Users\mechart\Desktop\auth\app.js:2:15)
    at Module._compile (module.js:435:26)
    at Object.Module._extensions..js (module.js:442:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:311:12)
    at Function.Module.runMain (module.js:467:10)

最佳答案

Can't find module 'Express' 表示 Express 模块未正确安装在您的项目可访问的路径中。您需要使用 NPM 安装该模块。与您在此项目中使用的任何其他模块相同。它应该像更改到应用程序的目录然后在控制台中发出此命令一样简单:

npm install express
<小时/>

您还有另一个需要修复的错误。

重复的变量定义导致错误处理不起作用

在此代码中,您有一个名为 err 的参数,然后还有 var err。这将使您的参数被本地声明的 var 覆盖,并且您的错误处理将不起作用:

更改此:

user.save(function(err) {
    if (err) {
        var err = "Something bad happened! Try again!";
        if (err.code === 11000) {
            error = "That email is already taken. Try another.";
        }
        res.render("register.jade", { error: error });
    } else {
        res.redirect("/dashboard");
    }
});

对此:

user.save(function(err) {
    if (err) {
        // change this variable name to errMsg in each place you use it
        var errMsg = "Something bad happened! Try again!";
        if (err.code === 11000) {
            errMsg = "That email is already taken. Try another.";
        }
        res.render("register.jade", { error: errMsg });
    } else {
        res.redirect("/dashboard");
    }
});

关于javascript - 为什么我的代码会抛出错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33622097/

相关文章:

node.js - 尝试在express中编写用户登录身份验证代码,无法在 Node 中使用express-session登录

javascript - 如何通过http从mongoDB发送大量文档?

javascript - 2022 年使用云函数处理 Express 中的多部分/表单数据

javascript - 使用 angularjs 从 json 中获取 ng-options

javascript - WebGL 在像素级别混合颜色

javascript - 使用javascript匹配来提取字符串的一部分

javascript - 无法在 Windows 10 x64 上安装 hiredis@0.5.0

node.js - babel-node 的永远错误

javascript - Angular5:在加载页面之前加载微调器

javascript - 在没有 Node 的 Apache 环境中加载 React 组件的模块