If you have this error when running yarn, chances are you have installed the wrong yarn package which come from cmdtest
, let’s remove it and install the correct one using npm
sudo apt remove cmdtest npm install -g yarn
If you have this error when running yarn, chances are you have installed the wrong yarn package which come from cmdtest
, let’s remove it and install the correct one using npm
sudo apt remove cmdtest npm install -g yarn
If save() does not save the entity to mongodb database, probably there’s something wrong with the data itself like containing _id
field
delete data._id; //clean up to ensure no _id field. let user = new User(data); user.save();
Also it is better to provide error handling so we can read what went wrong using the log.
let user = new User(data); user.save(function (err) { if (err) { console.log(err); } });
In Javascript, to include a class, constant or definition from one file to another we need to use exports. exports
and module.exports
are pointing to the same object, so sometimes you can see both styles.
class Employee { constructor(name, age, email) { this.name = name; this.age = age; this.email = email; } getStats() { return ` Name: ${this.name} Age: ${this.age} Email: ${this.email} `; } } module.exports = Employee;
var Employee = require('../models/employee'); Employee employee = new Employee('Robin hood', 1000, '[email protected]');
var Employee = require('./models/employee'); Employee employee = new Employee('Robin hood', 1000, '[email protected]');
Imagine the original app.js is this long file, how to split app.js of express into smaller files is as following
var http = require('http'), path = require('path'), methods = require('methods'), express = require('express'), bodyParser = require('body-parser'), session = require('express-session'), cors = require('cors'), passport = require('passport'), errorhandler = require('errorhandler'), mongoose = require('mongoose'); var isProduction = process.env.NODE_ENV === 'production'; // Create global app object var app = express(); var router = app.Router(); app.use(cors()); // Normal express config defaults app.use(require('morgan')('dev')); app.use(bodyParser.urlencoded({ extended: false })); app.use(bodyParser.json()); app.use(require('method-override')()); app.use(express.static(__dirname + '/public')); app.use(session({ secret: 'conduit', cookie: { maxAge: 60000 }, resave: false, saveUninitialized: false })); if (!isProduction) { app.use(errorhandler()); } if(isProduction){ mongoose.connect(process.env.MONGODB_URI); } else { mongoose.connect('mongodb://localhost/conduit'); mongoose.set('debug', true); } var passport = require('passport'); var LocalStrategy = require('passport-local').Strategy; var mongoose = require('mongoose'); var User = mongoose.model('User'); passport.use(new LocalStrategy({ usernameField: 'user[email]', passwordField: 'user[password]' }, function(email, password, done) { User.findOne({email: email}).then(function(user){ if(!user || !user.validPassword(password)){ return done(null, false, {errors: {'email or password': 'is invalid'}}); } return done(null, user); }).catch(done); })); router.get('/user', auth.required, function(req, res, next){ User.findById(req.payload.id).then(function(user){ if(!user){ return res.sendStatus(401); } return res.json({user: user.toAuthJSON()}); }).catch(next); }); router.put('/user', auth.required, function(req, res, next){ User.findById(req.payload.id).then(function(user){ if(!user){ return res.sendStatus(401); } // only update fields that were actually passed... if(typeof req.body.user.username !== 'undefined'){ user.username = req.body.user.username; } if(typeof req.body.user.email !== 'undefined'){ user.email = req.body.user.email; } if(typeof req.body.user.bio !== 'undefined'){ user.bio = req.body.user.bio; } if(typeof req.body.user.image !== 'undefined'){ user.image = req.body.user.image; } if(typeof req.body.user.password !== 'undefined'){ user.setPassword(req.body.user.password); } return user.save().then(function(){ return res.json({user: user.toAuthJSON()}); }); }).catch(next); }); /// catch 404 and forward to error handler app.use(function(req, res, next) { var err = new Error('Not Found'); err.status = 404; next(err); }); /// error handlers // development error handler // will print stacktrace if (!isProduction) { app.use(function(err, req, res, next) { console.log(err.stack); res.status(err.status || 500); res.json({'errors': { message: err.message, error: err }}); }); } // production error handler // no stacktraces leaked to user app.use(function(err, req, res, next) { res.status(err.status || 500); res.json({'errors': { message: err.message, error: {} }}); }); // finally, let's start our server... var server = app.listen( process.env.PORT || 3000, function(){ console.log('Listening on port ' + server.address().port); });
Split passport and routes
var http = require('http'), path = require('path'), methods = require('methods'), express = require('express'), bodyParser = require('body-parser'), session = require('express-session'), cors = require('cors'), passport = require('passport'), errorhandler = require('errorhandler'), mongoose = require('mongoose'); var isProduction = process.env.NODE_ENV === 'production'; // Create global app object var app = express(); app.use(cors()); // Normal express config defaults app.use(require('morgan')('dev')); app.use(bodyParser.urlencoded({ extended: false })); app.use(bodyParser.json()); app.use(require('method-override')()); app.use(express.static(__dirname + '/public')); app.use(session({ secret: 'conduit', cookie: { maxAge: 60000 }, resave: false, saveUninitialized: false })); if (!isProduction) { app.use(errorhandler()); } if(isProduction){ mongoose.connect(process.env.MONGODB_URI); } else { mongoose.connect('mongodb://localhost/conduit'); mongoose.set('debug', true); } require('./config/passport'); app.use(require('./routes')); /// catch 404 and forward to error handler app.use(function(req, res, next) { var err = new Error('Not Found'); err.status = 404; next(err); }); /// error handlers // development error handler // will print stacktrace if (!isProduction) { app.use(function(err, req, res, next) { console.log(err.stack); res.status(err.status || 500); res.json({'errors': { message: err.message, error: err }}); }); } // production error handler // no stacktraces leaked to user app.use(function(err, req, res, next) { res.status(err.status || 500); res.json({'errors': { message: err.message, error: {} }}); }); // finally, let's start our server... var server = app.listen( process.env.PORT || 3000, function(){ console.log('Listening on port ' + server.address().port); });
var passport = require('passport'); var LocalStrategy = require('passport-local').Strategy; var mongoose = require('mongoose'); var User = mongoose.model('User'); passport.use(new LocalStrategy({ usernameField: 'user[email]', passwordField: 'user[password]' }, function(email, password, done) { User.findOne({email: email}).then(function(user){ if(!user || !user.validPassword(password)){ return done(null, false, {errors: {'email or password': 'is invalid'}}); } return done(null, user); }).catch(done); }));
var mongoose = require('mongoose'); var router = require('express').Router(); var passport = require('passport'); var User = mongoose.model('User'); var auth = require('../auth'); router.get('/user', auth.required, function(req, res, next){ User.findById(req.payload.id).then(function(user){ if(!user){ return res.sendStatus(401); } return res.json({user: user.toAuthJSON()}); }).catch(next); }); router.put('/user', auth.required, function(req, res, next){ User.findById(req.payload.id).then(function(user){ if(!user){ return res.sendStatus(401); } // only update fields that were actually passed... if(typeof req.body.user.username !== 'undefined'){ user.username = req.body.user.username; } if(typeof req.body.user.email !== 'undefined'){ user.email = req.body.user.email; } if(typeof req.body.user.bio !== 'undefined'){ user.bio = req.body.user.bio; } if(typeof req.body.user.image !== 'undefined'){ user.image = req.body.user.image; } if(typeof req.body.user.password !== 'undefined'){ user.setPassword(req.body.user.password); } return user.save().then(function(){ return res.json({user: user.toAuthJSON()}); }); }).catch(next); });
let fruits = [ {key: 0, name: 'Apple'}, {key: 1, name: 'Banana'}, {key: 2, name: 'Orange'}, {key: 3, name: 'Grape'} ]; fruits.filter(function (fruit) { return fruit.key % 2 == 1; // 1 and 3 }).map(function (fruit) { return fruit.key + ':' + fruit.name; }).forEach(function (fruit) { console.log(fruit); }); ---------- 1:Banana 3:Grape fruits.filter(function (fruit) { return fruit.key % 2 == 0; // 0 and 2 }).map(function (fruit) { return fruit.key + ':' + fruit.name; }).forEach(function (fruit) { console.log(fruit); }); ---------- 0:Apple 2:Orange var total = fruits.filter(function (fruit) { return fruit.key % 2 == 1; // 1 and 3 }).map(function (fruit) { return fruit.key * 5; // 1 * 5, 3 * 5 }).reduce(function (acc, score) { return acc + score; //accumulate 1 * 5 + 3 * 5 }, 0); console.log(total); ---------- 20
const states = { "AL": "Alabama", "AK": "Alaska", "AS": "American Samoa", "AZ": "Arizona", "AR": "Arkansas", "CA": "California" }; const entries = Object.entries(states); for (const [abbr, name] of entries) { console.log(`abbr: ${abbr}, name: ${name}`); }
module.exports = Object.freeze({ STATES: { "AL": "Alabama", "AK": "Alaska", "AS": "American Samoa", "AZ": "Arizona", "AR": "Arkansas", "CA": "California", "CO": "Colorado", "CT": "Connecticut", "DE": "Delaware", "DC": "District Of Columbia", "FM": "Federated States Of Micronesia", "FL": "Florida", "GA": "Georgia", "GU": "Guam", "HI": "Hawaii", "ID": "Idaho", "IL": "Illinois", "IN": "Indiana", "IA": "Iowa", "KS": "Kansas", "KY": "Kentucky", "LA": "Louisiana", "ME": "Maine", "MH": "Marshall Islands", "MD": "Maryland", "MA": "Massachusetts", "MI": "Michigan", "MN": "Minnesota", "MS": "Mississippi", "MO": "Missouri", "MT": "Montana", "NE": "Nebraska", "NV": "Nevada", "NH": "New Hampshire", "NJ": "New Jersey", "NM": "New Mexico", "NY": "New York", "NC": "North Carolina", "ND": "North Dakota", "MP": "Northern Mariana Islands", "OH": "Ohio", "OK": "Oklahoma", "OR": "Oregon", "PW": "Palau", "PA": "Pennsylvania", "PR": "Puerto Rico", "RI": "Rhode Island", "SC": "South Carolina", "SD": "South Dakota", "TN": "Tennessee", "TX": "Texas", "UT": "Utah", "VT": "Vermont", "VI": "Virgin Islands", "VA": "Virginia", "WA": "Washington", "WV": "West Virginia", "WI": "Wisconsin", "WY": "Wyoming" } });