2

So i've been trying to use ES6 features in Express. I read that Nodejs now has natively supports es6 so I don't need babel to do anything for me.

Within my app.js file I have:

'use strict';

const express = require('express');
const path = require('path');
const favicon = require('serve-favicon');
const logger = require('morgan');
const cookieParser = require('cookie-parser');
const bodyParser = require('body-parser');
const mongodb = require('mongodb');
const mongoose = require('mongoose');
const shell = require('shelljs');
const fs = require('fs'), gm = require('gm');
const routes = require('./routes/index');
const users = require('./routes/users');
const app = express();
// view engine setup
// app.use(express.static(__dirname + '/bundle'));
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'hbs');
// uncomment after placing your favicon in /public
// app.use(favicon(__dirname + '/public/favicon.ico'));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', routes);
app.use('/users', users);
// catch 404 and forward to error handler
app.use((req, res, next) => {
    const err = new Error('Not Found');
    err.status = 404;
    next(err);
});
// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
    app.use((err, req, res, next) => {
        res.status(err.status || 500);
        res.render('error', {
            message: err.message,
            error: err
        });
    });
}
// production error handler
// no stacktraces leaked to user
app.use((err, req, res, next) => {
    res.status(err.status || 500);
    res.render('error', {
        message: err.message,
        error: {}
    });
});
module.exports = app;

I then have my server.js file which just basically runs http server and points to my app.js no errors within my server.js file. However, I am using es5 in there.

Path/To/Project/app.js:3
const express = require('express');
^^^^^
SyntaxError: Use of const in strict mode.
    at exports.runInThisContext (vm.js:73:16)
    at Module._compile (module.js:443:25)
    at Object.Module._extensions..js (module.js:478:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Module.require (module.js:365:17)
    at require (module.js:384:17)
    at Object.<anonymous> (Path/To/Project/server.js:7:11)
    at Module._compile (module.js:460:26)
    at Object.Module._extensions..js (module.js:478:10)
NAME-MacBook-Pro% 

I removed the 'use strict'; from the top of the file as it complained but just got another error with unexpected token.

Do I need to use babel to compile it down or something? Why's it complaining?

Thanks!

3
  • 2
    Which version of nodejs you are using? Commented Nov 29, 2015 at 12:27
  • 2
    That was embarrassing. I was using V0.12.0, upgraded to V5.0.0 now. Works fine! Commented Nov 29, 2015 at 12:33
  • I was expecting that, since I walked into the same trap. :-) Happy coding. Commented Nov 29, 2015 at 12:35

3 Answers 3

3

I think you are using an old version of node. You have to have version 4+ to be able to use ES6 features like const.

Sign up to request clarification or add additional context in comments.

Comments

2

If you need use to all features of es6, its better to compile using babel first. As even Node v5.0.0 implements only 59% of ES6 features as of today.

Check this link for ES6 compatibility table.

Comments

0

const will still continue complaining as in even in ES6 const has been shipped as block scope. And your are using it here outside block.

Please go through this for more details

1 Comment

Yeah, I would of thought it would of worked anyway. Cause I declared it globally

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.