在Expressjs,Node中使用ES6功能

时间:2015-11-29 12:21:29

标签: javascript node.js express

所以我一直试图在Express中使用ES6功能。我读到Nodejs现在本身支持es6所以我不需要babel为我做任何事情。

app.js文件中,我有:

'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;

然后我的server.js文件基本上运行了http服务器并指向我的app.js文件中的server.js没有错误。但是,我在那里使用es5。

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% 

我在抱怨时从文件顶部删除了'use strict';但是unexpected token又出现了另一个错误。

我需要使用babel来编译它还是什么?为什么抱怨?

谢谢!

3 个答案:

答案 0 :(得分:3)

我认为您使用的是旧版本的节点。您必须拥有版本4+才能使用const等ES6功能。

答案 1 :(得分:1)

如果您需要使用es6的所有功能,最好先使用babel进行编译。至于今天,偶数Node v5.0.0仅实现了59%的ES6功能。

检查this链接以获取ES6兼容性表。

答案 2 :(得分:0)

const仍将继续抱怨,因为即使在ES6中,const也已作为块范围发布。你正在外面使用它。

请仔细阅读this了解详情