2015-12-13 2 views
3

Обновление 12/14/15: Я вижу, что следующая глава дает указание читателю создать модуль« require », поэтому я буду продвигаться вперед. Книга, кажется, плохо отредактирована - возможно, они перегруппировали какой-то контент и не заметили ошибок, внесенных этими изменениями. По моему первоначальному вопросу, ниже, вещи, безусловно, не в порядке. Но даже если в книге есть некоторые ошибки, это заставляет меня делать внешнее чтение, чтобы понять эти ошибки, и отправлять вопросы на SO, и это помогает мне учиться. Спасибо за вашу помощь, ребята!Ошибка узла: «Не удается найти маршруты модуля» «


Я использую «Веб-разработка с MongoDB и Node.js - второе издание», чтобы узнать, узлов и MongoDB (удивительно, правда?). Подход книги, по-видимому, заключается в том, чтобы бросить читателя через создание приложения и лишь частично объяснить ситуацию на этом пути. Поэтому, когда что-то идет не так, я не понимаю, почему это пошло не так или как это исправить. Кроме того, я нашел пару опечаток кода в книге до сих пор, поэтому, возможно, одна из них вызывает мою проблему.

Прямо сейчас, я пытаюсь запустить файл server.js, который книга заставила меня создать, и я столкнулся с ошибкой. Я все еще очень новичок в Node, Express и полный стек вообще, поэтому ошибка может быть из-за чего-то действительно простого и очевидного, что мне не хватает. Помогите!

Моя структура папок: Folder Structure папка Узел Модули имеет кучу папок, которые были созданы, когда я запустил эту команду: НПХ установить экспресс MORGAN тела анализатор печенья анализатор метод Непереопределяемого ErrorHandler экспресс-рули - -сохраняйте

до сих пор, у меня есть два файла, содержимое которого были скопированы прямо из книги: server.js:

var express = require('express'), 
    config = require('./server/configure'), 
    app = express(); 

app.set('port', process.env.PORT || 3300); 
app.set('views', __dirname + '/views'); 
app = config(app); 

app.get('/', function(req, res){ 
    res.send('Hello World'); 
}); 
app.listen(app.get('port'), function(){ 
    console.log('Server up: http://localhost:' + app.get('port')); 
}); 

И configure.js, внутри/сервер/папку. В коде для этого файла в книге появилось два опечатка, которые я исправил в этом файле. (Но, может быть, я пропустил другие, или «исправлены» те неправильно.)

var path = require('path'), 
    routes = require('./routes'), 
    exphbs = require('express-handlebars'), 
    express = require('express'), 
    bodyParser = require('body-parser'), 
    cookieParser = require('cookie-parser'), 
    morgan = require('morgan'), 
    methodOverride = require('method-override'), 
    errorHandler = require('errorhandler'); 

module.exports = function(app){ 
    app.use(morgan('dev')); 
    app.use(bodyParser.urlencoded({'extended': true})); 
    app.use(bodyParser.json()); 
    app.use(methodOverride()); 
    app.use(cookieParser('some-secret-value-here')); 
    routes(app); //moving the routes to routes folder 

    app.use('/public/', 
     express.static(path.join(__dirname, '../public'))); 

    if('development' === app.get('env')){ 
     app.use(errorHandler()); 
    } 
    return app; 
}; 

В терминале я вхожу node server.js. Я получаю сообщение об ошибке: error returned by trying to run server.js

В файле configure.js, я думаю, я понимаю, почему я получаю ошибки - routes = require('./routes'), заявления, кажется, требует модуля, который еще не существует, потому что книга не имеет описал, как его создать, и, похоже, он не был установлен с помощью более ранней команды npm. Но, я новичок в этом (как я все время говорю), поэтому я могу ошибаться. Может ли кто-нибудь помочь мне разобраться, что здесь происходит?

Кроме того, если вам посчастливилось порекомендовать хорошую книгу для обучения Экспресс, я все уши - возможно, я должен просто бросить эту книгу и начать с той, которая учит большей части основ, прежде чем перейти к созданию примера приложения ,

+0

Если вы еще не написали 'маршруты ', вы получите сообщение об ошибке, когда Express попытается его исправить. Это так просто. – Andy

+0

@ Энди, ладно, спасибо. –

ответ

2

Вы понимаете правильно. Когда вам требуется файл, как так

routes = require('./routes') 

затем nodejs собирается искать routes.js файл в корневом каталоге на сайте.

Поскольку вы еще не создали этот файл, он будет бомбить, как только вы нажмете на него.

Кроме того, маршруты обычно устанавливаются как этот

routes = require('./routes') 

затем через некоторое время, когда у вас есть экспресс-приложение создано вы будете

app.use('/', routes); //sets up these routes on a base '/' route for your site 

, а затем в routes.js вы можете сделайте что-нибудь наподобие

var express = require('express'); 
var router = express.Router(); 

router.get('/', function(req, res, next) { 
    res.render('hey this worked'); 
}); 

router.get('/another/route', function(req, res, next) { 
    res.json({ hello: 'world' }); 
}); 

module.exports = router; 
+0

'require ('./ routes')' будет пытаться загрузить route.js относительно пути к файлу, в котором он находится. В этом случае это фактически изнутри папки сервера, а не из корневой папки. – nicknystrom

+0

@Joseph, спасибо, это полезно. –

Смежные вопросы