Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript server.js中的错误无法定义模块“cookie”?_Javascript_Node.js_Cookies_Express - Fatal编程技术网

Javascript server.js中的错误无法定义模块“cookie”?

Javascript server.js中的错误无法定义模块“cookie”?,javascript,node.js,cookies,express,Javascript,Node.js,Cookies,Express,我根据这里的示例创建了一个网站,并尝试实现该服务器。虽然它工作得很好,但在我添加了身份验证和cookie代码之后,server.js停止工作,说找不到模块“cookie”,我认为这与express会话有关 这是我的server.js代码 var mongoose = require('mongoose'); var bcrypt = require('bcryptjs'); var express = require('express'); var path = require('path');

我根据这里的示例创建了一个网站,并尝试实现该服务器。虽然它工作得很好,但在我添加了身份验证和cookie代码之后,server.js停止工作,说找不到模块“cookie”,我认为这与express会话有关

这是我的server.js代码

var mongoose = require('mongoose');
var bcrypt = require('bcryptjs');
var express = require('express');
var path = require('path');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var session = require('express-session');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;

var showSchema = new mongoose.Schema(
    {
        _id: Number,
        name: String,
        airsDayofWeek: String,
        airsTime: String,
        firstAired: Date,
        genre: [String],
        network: String,
        overview: String,
        rating: Number,
        ratingCount: Number,
        status: String,
        poster: String,
        subscribers: [{
                type: mongoose.Schema.Types.ObjectId,
                ref: 'User'
            }],
        episodes: [{
                season: Number,
                episodeNumber: Number,
                episodeName: String,
                firstAired: Date,
                overview: String
            }]
    });

var userSchema = new mongoose.Schema(
    {
        email: { type: String, unique: true },
        password: String
    });

userSchema.pre('save', function (next) {
    var user = this;
    if (!user.isModified('password')) return next();
    bcrypt.genSalt(10, function (err, salt) {
        if (err) return next(err);
        bcrypt.hash(user.password, salt, function (err, hash) {
            if (err) return next(err);
            user.password = hash;
            next();
        });
    });
});

userSchema.methods.comparePassword = function (candidatePassword, cb) {
    bcrypt.compare(candidatePassword, this.password, function (err, isMatch) {
        if (err) return cb(err);
        cb(null, isMatch);
    });
}

var User = mongoose.model('User', userSchema);
var Show = mongoose.model('Show', showSchema);

mongoose.connect('localhost');

var app = express();

app.set('port', process.env.PORT || 3000);
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended:false}));
app.use(cookieParser());
app.use(session({ secret: 'keyboard cat' }));
app.use(passport.initialize());
app.use(passport.session());
app.use(express.static(path.join(__dirname, 'public')));

app.listen(app.get('port'), function () {
    console.log('Express server listening on port ' + app.get('port'));
});

function ensureAuthenticated(req, res, next) {
    if (req.isAuthenticated()) next();
    else res.send(401);
};

passport.use(new new LocalStrategy({ usernameField: 'email' }, function (email, password, done) {
    User.findOne({ email: email }, function (err, user) {
        if (err) return done(err);
        if (!user) return done(null, false);
        user.comparePassword(password, function (err, isMatch) {
            if (err) return done(err);
            if (isMatch) return done(null, user);
            return done(null, false);
        });
    });
}));



app.get('/api/shows', function (req, res, next) {
    var query = Show.find();
    if (req.query.genre) {
        query.where({ genre: req.query.genre });
    }
    else if (req.query.alphabet) {
        query.where({ name: new RegExp('^' + '[' + req.query.alphabet + ']', 'i') });

    }
    else {
        query.limit(12);
    }
    query.exec(function (err, shows) {
        if (err) return next(err);
        res.send(shows);
    });

});

app.get('/api/shows/:id', function (req, res, next) {
    Show.findById(req.params.id, function (err, show) {
        if (err) return next(err);
        res.send(show);
    });
});

app.use(function (req, res, next) {
    if (req.user) {
        res.cookie('user', JSON.stringify(req.user));
    }
    next();
});

app.post('/api/shows', function (req, res, next) {
    var apiKey = '4B8EA1DCA9C6B577';
    var parser = xml2js.Parser({
        explicitArray: false,
        normalizeTags: true
    });
    var seriesName = req.body.showName
    .toLowerCase()
    .replace(/ /g, '_')
    .replace(/[^\w-]+/g, '');

    async.waterfall([
        function (callback) {
            request.get('http://thetvdb.com/api/GetSeries.php?seriesname=' + seriesName, function (error, response, body) {
                if (error) return next(error);
                parser.parseString(body, function (err, result) {
                    if (!result.data.series) {
                        return res.send(404, { message: req.body.showName + ' was not found.' });
                    }
                    var seriesId = result.data.series.seriesid || result.data.series[0].seriesid;
                    callback(err, seriesId);
                });
            });
        },
        function (seriesId, callback) {
            request.get('http://thetvdb.com/api/' + apiKey + '/series/' + seriesId + '/all/en.xml', function (error, response, body) {
                if (error) return next(error);
                parser.parseString(body, function (err, result) {
                    var series = result.data.series;
                    var episodes = result.data.episode;
                    var show = new Show({
                        _id: series.id,
                        name: series.seriesname,
                        airsDayOfWeek: series.airs_dayofweek,
                        airsTime: series.airs_time,
                        firstAired: series.firstaired,
                        genre: series.genre.split('|').filter(Boolean),
                        network: series.network,
                        overview: series.overview,
                        rating: series.rating,
                        ratingCount: series.ratingcount,
                        runtime: series.runtime,
                        status: series.status,
                        poster: series.poster,
                        episodes: []
                    });
                    _.each(episodes, function (episode) {
                        show.episodes.push({
                            season: episode.seasonnumber,
                            episodeNumber: episode.episodenumber,
                            episodeName: episode.episodename,
                            firstAired: episode.firstaired,
                            overview: episode.overview
                        });
                    });
                    callback(err, show);
                });
            });
        },
        function (show, callback) {
            var url = 'http://thetvdb.com/banners/' + show.poster;
            request({ url: url, encoding: null }, function (error, response, body) {
                show.poster = 'data:' + response.headers['content-type'] + ';base64,' + body.toString('base64');
                callback(error, show);
            });
        }
    ], function (err, show) {
        if (err) return next(err);
        show.save(function (err) {
            if (err) {
                if (err.code == 11000) {
                    return res.send(409, { message: show.name + ' already exists.' });
                }
                return next(err);
            }
            res.send(200);
        });
    });
});

app.post('/api/login', passport.authenticate('local'), function (req, res){
    res.cookie('user', JSON.stringify(req.user));
    res.send(req.user);
})

app.post('/api/signup', function (req, res, next) {
    var user = new User({
        email: req.body.email,
        password: req.boy.password
    });
    user.save(function (err) {
        if (err) return next(err);
        res.send(200);
    });
});

app.get('/api/logout', function (req, res, next) {
    req.logout();
    res.send(200);
});


app.get('*',function (req, res){
    res.redirect('/#' + req.originalUrl);
})

app.use(function (err, req, res, next) {
    console.error(err.stack);
    res.send(500, { message: err.message });
});


passport.serializeUser(function (user, done) {
    done(null, user, id);
});

passport.deserializeUser(function (id, done) {
    User.findById(id, function (err, user) {
        done(err, user);
    });
});

即使我改变了密码的位置,仍然没有任何效果。我是否缺少一些模块?或者将代码按错误的顺序放置。我是node.js的初学者,希望您能提供帮助

cookie解析器在package.json中吗?如果没有,请运行'npm i-save cookie parser',然后重新启动应用程序。是的,软件包尚未正确安装。谢谢@SwarajGiri噢,是的,谢谢,还给了我另一个错误,它在server.js中说“id未定义”,这可能是什么?我想弄清楚,但还是没有结果。当我按login时,很抱歉忘了提到这一点。有什么建议吗