15

私は localhost:port/admin/ のルートを作成しようとしていますが、routes.js ファイルと view.js ファイルを一致するフォルダーに保持したいので、後でスパゲティが多すぎないようにします。

しかし、私は取得し続けます: 500 エラー: 新しいルートを作成しようとしているためにビュー "/admin/manage_subjects" をルックアップできませんでした。

私はエクスプレスで次のビューフォルダを持っています

mainapp(root)
  routes(folder)
    admin(folder)
      index.js(nested inside admin)
    index.js(nested inside routes)
  views(folder)
    admin(folder)
      admin_layout.jade(nested inside admin)
      manage_subjects.jade(nested inside admin)
    index.jade(nested inside views)
    layout.jade(nested inside views)

コード: routes/admin/index.js

exports.index = function (req, res) {
res.render('manage_subjects',{title:'Express'});}

ビュー/管理者/manage_subjects.jade

extends admin_layout
block content
h1 = title
p Welcome to #{title}

私のapp.jsコード

/**
 * Module dependencies.
 */

var express = require('express')
  , routes = require('./routes')
  , admin_routes = require('./routes/admin/')
  , user = require('./routes/user')
  , http = require('http')
  , path = require('path')
  , repository = new (require('./domain_model/repository'))();

var app = express();

// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));

// development only
if ('development' == app.get('env')) {
  app.use(express.errorHandler());
}

//fill local subjects
repository.subjects.GetAll(function (err, data) {
    if (err) throw err;
    app.locals.subjects = data;
});

//append routes
app.get('/', routes.index);
app.get('/admin', admin_routes.index);
app.get('/users', user.list);

http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on http://localhost:' + app.get('port'));
});
4

3 に答える 3

15

私は同じ問題だと思うものに対処してきましたが、それを修正する方法を見つけました。したがって、他の誰かがこの問題に遭遇した場合に備えて、私は自分の解決策を投稿しています。

だから、これが私が持っていたもので、404と500の原因でした

app.js

var routes = require('./routes/index');
var admin = require('./routes/admin');

app.use('/', routes);
app.use('/admin', admin);

ここに私のroutes/index.jsがありました

//append routes
var express = require('express');
var router = express.Router();

router.get('/', function(req, res) {
    res.render('index', {title: 'Express'});
});

module.exports = router;

そして私のroutes/admin.js:

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

router.get('/admin', function(req, res) {
    res.render('admin/index', {title: 'Express'});
});

module.exports = router;

router.get() 関数内で 2 番目の /admin を定義することにより、次のパスの views/admin/admin/index.ejs の下にあるビュー フォルダーで html を探すようノードに効果的に指示していたと思います。したがって、これを修正するには、router.get() から /admin を削除するか、app.use() から /admin を削除するだけでした。したがって、作業コードは次のようになります。

app.js

var routes = require('./routes/index');
var admin = require('./routes/admin');

app.use('/', routes);
app.use('/admin', admin); //I left the /admin here and instead removed the one in routes/admin.js

ここに私のroutes/index.jsがありました

//append routes
var express = require('express');
var router = express.Router();

router.get('/', function(req, res) {
    res.render('index', {title: 'Express'});
});

module.exports = router;

そして私のroutes/admin.js:

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

router.get('/', function(req, res) { //NOTICE THE CHANGE HERE
    res.render('admin/index', {title: 'Express'});
});

module.exports = router;

そのため、その変更を行うと、ビューフォルダーにサブフォルダーを作成できるようになりました。

于 2014-09-10T21:25:14.080 に答える
0

モジュラー アプリに関する TJ のビデオをチェックしたいと思いon his vimeoます。このワークフローの最良の部分は、コードが非常に柔軟になり、維持しやすくなることですDRY

さらに、私は自分でこのようなことをしますapp.set("views")

var path = require("path");
app.set('views', path.join(__dirname, 'views'));

// you can then extend this to the example for routes

app.js別の代替手段は、ファイル内の次のようなものです。

var express require("express")
var app = express()
var routes = require("./path/to/routes")(app)

ルートは次のようになります。

routes = function (app) {
  app.get("/route", middleWareifYou.gotIt, route.handler || function (req, res) {
    res.send("some msg");
  });
};

module.exports = routes

乾杯、これが役立つことを願っています!

于 2013-07-02T20:57:24.060 に答える