简体   繁体   中英

Using ES6 features in Expressjs, Node

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!

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 .

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.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM