Je crée un serveur nodejs (une loginapp) mais quand j'essaye de node app une erreur (elle n'était pas là avant) est sortie:
var mongoose = require('mongoose');
var bcrypt = require('bcryptjs');
// USER SCHEMA
var UserSchema = mongoose.Schema({
username: {
type: String,
index: true
},
name: {
type: String
},
email: {
type: String
},
password: {
type: String
}
});
var User = module.exports = mongoose.model('User', UserSchema);
module.exports.createUser = function(newUser, callback) {
bcrypt.genSalt(10, function(err, salt) {
bcrypt.hash(newUser.password, salt, function(err, hash) {
newUser.password = hash;
newUser.save(callback);
});
});
}
Je pense qu'il y a un lien avec mongo mais je n'ai pas vu l'erreur,
Ceci est mon code app.js (NON COMPLET) me demande si vous avez besoin de plus de mon code
var express = require('express');
var router = express.Router();
var bodyParser = require('body-parser');
var User = require('../models/user');
// REGISTER
router.get('/register', (req, res) => {
res.render('register');
});
// LOGIN
router.get('/login', (req, res) => {
res.render('login');
});
// REGISTER
router.post('/register', (req, res) => {
var name = req.body.name;
var username = req.body.username;
var email = req.body.email;
var password = req.body.password;
var password2 = req.body.password2;
// VALIDATION
req.checkBody('name','Name is required').notEmpty();
req.checkBody('username','Username is required').notEmpty();
req.checkBody('email','Email is required').notEmpty();
req.checkBody('email','Email is not valid').isEmail();
req.checkBody('password','Password is required').notEmpty();
req.checkBody('password2','Passwords do not match').equals(req.body.password);
var errors = req.validationErrors();
if(errors) {
res.render('register', {
errors:errors
});
} else {
var newUser = new User({
name: name,
username: username,
email: email,
password: password
});
User.createUser(newUser, function(err, user) {
if(err) throw err;
console.log(user);
});
req.flash('success_msg', 'You are now registered and u can log');
res.redirect('/users/login');
}
});
module.exports = router;
Ceci est mon fichier users.js
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var exphbs = require('express-handlebars');
var expressValidator = require('express-validator');
var bodyParser = require('body-parser');
var flash = require('connect-flash');
var session = require('express-session');
var passport = require('passport');
var LocalStrategy = require('passport-local'),Strategy;
var mongo = require('mongodb');
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/loginapp', { useNewUrlParser: true });
var db = mongoose.connection;
var routes = require('./routes/index');
var users = require('./routes/users');
// APP INIT
var app = express();
// VIEW ENGINE
app.set('views', path.join(__dirname,'views'));
app.engine('handlebars', exphbs({ defaultLayout:'layout' }));
app.set('view engine','handlebars');
app.use('/', routes);
app.use('/users', users);
// SET PORT
app.set('port', (5000));
app.listen(app.get('port'), () => {
console.log('Server lancé sur le port ' + app.get('port'));
});
Et le fichier user.js
events.js:167
throw er; // Unhandled 'error' event
^
Error: listen EADDRINUSE: address already in use :::5000
at Server.setupListenHandle [as _listen2] (net.js:1290:14)
at listenInCluster (net.js:1338:12)
at Server.listen (net.js:1425:7)
at Function.listen (C:\Users\Corentin\Documents\loginapp\node_modules\express\lib\application.js:618:24)
at Object.<anonymous> (C:\Users\Corentin\Documents\loginapp\app.js:81:5)
at Module._compile (internal/modules/cjs/loader.js:689:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
at Module.load (internal/modules/cjs/loader.js:599:32)
at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
at Function.Module._load (internal/modules/cjs/loader.js:530:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:742:12)
at startup (internal/bootstrap/node.js:283:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:743:3)
Emitted 'error' event at:
at emitErrorNT (net.js:1317:8)
at process._tickCallback (internal/process/next_tick.js:63:19)
at Function.Module.runMain (internal/modules/cjs/loader.js:745:11)
at startup (internal/bootstrap/node.js:283:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:743:3)
Merci beaucoup à la personne qui peut aidez-moi!
8 Réponses :
Votre serveur express essaie d'ouvrir le port 500
app.set('port', (5000));
Et le message d'erreur suggère que ce port est déjà utilisé.
Vous pouvez soit changer le port de le serveur express ou trouvez l'application qui utilise le port 5000 et voyez si vous pouvez changer le port là-bas.
Est-ce que cela aide?
je redémarre mon code vs et mon terminal et son travail! merci d'avoir aidé
Essayez celui-ci
sudo kill -9 20152
COMMAND PID USER FD TYPE DEVICE SIZE / OFF NODE NAME
node 20152 abc 21u IPv6 195004 0t0 TCP *: http (ÉCOUTER)
sudo lsof -i :5000
Vous devriez essayer:
kill -9 PID
puis:
netstat -lpn | grep 5000
vous avez deux terminaux ouverts avec une connexion ouverte au port 5000, tuez-en un!
Ou mieux encore, tout tuer et redémarrer pkill -9 node puis démarrer le client et / ou le serveur.
redémarrez votre ordinateur portable / serveur, il libérera tous les ports occupés, puis réessayez ... vous pouvez également utiliser
kill -9 PID
puis tuer le processus en utilisant:
XXX
mais la plupart du temps cela ne fonctionnera pas pour nodemon, et ne fonctionnera pas pour moi.
Cela fonctionne pour moi:
sudo killall -9 node
Cela a également fonctionné avec moi. Le simple fait de tuer le port en utilisant PID n'a pas fonctionné pour moi.
Je sais que c'est un ancien fil, mais peut-être que quelqu'un trouvera cela utile.
Pour être plus efficace, j'ai ajouté le script bash suivant à un alias dans le fichier bashrc, donc je n'ai pas à taper lsof -i: 5000 , puis copiez le PID, puis exécutez kill -9 PID .
Dans le .bashrc (vous pouvez le trouver normalement dans le chemin ~ / .bashrc ), mettez quelque part à l'intérieur ce qui suit:
alias k5k='lsof -t -i:5000 | xargs kill -9'
J'ai nommé cet alias k5k pour "tuer 5 mille (k)", mais vous le nommez comme vous voulez.
Ensuite, vous pouvez simplement taper k5k et cela tuera toutes les instances fonctionnant sur le port 5000.
J'ai trouvé que fuser -k 5000 / tcp est le moyen le plus rapide de tuer un processus sur un port spécifique.
duplication possible stackoverflow.com/questions/9898372/…
Ça ne fonctionne pas pour moi
essayez de redémarrer votre machine. si cela n'aide pas. essayez d'utiliser un autre port
Peut-être en double - stackoverflow.com/questions/39632667/...