【发布时间】:2016-03-23 10:51:17
【问题描述】:
我已经尝试了我在 s/o 上找到的所有答案,我确信我一定遗漏了一些东西。什么对我没有错误反而给了我 404。我尝试了来自Organize routes in Node.js 的答案,strongloop 的route-separation 模式,来自How to include route handlers in multiple files in Express? 的答案,遇到了与Router.use requires middleware function? 类似的错误,但这些答案都没有奏效. Unable to Split Routes into Separate Files in Express 4.0 的答案不会出错,但也会出现 404s。似乎每个答案都有不同的语法和风格,也许是我混合和匹配不正确?
现在我的 /routes/persons.js 有这个模式:
var express = require('express');
var persons = express.Router();
persons.route('/persons/:user_id')
.put(function (req, res, next) {
// etc
});
module.exports = persons;
在我的 server.js 文件中,我有:
var persons = require('./routes/persons');
app.use('/persons', persons);
这种组合不会引发错误,但它也不会做任何事情。我尝试将端点添加到 server.js 行:
var persons = require('./routes/persons');
app.get('/persons/:user_id', persons.addpersons);
将 people.js 剥离为仅导出函数:
exports.addpersons = function (req, res, next) {
var list = req.body;
// etc
}
还有一些变体,例如将整个 person.js 文件包装在 module.exports = function() 中,在末尾粘贴 module.exports = router,使用 app 而不是 router 等。
我忽略了什么?我应该添加一些其他中间件,重新安排我调用端点的方式,使用应用程序,还是坚持使用 router.route?当没有错误但端点仍然是 404 时,最可能的罪魁祸首是什么?
非常感谢!
============= 已编辑以包含 SERVER.JS =============
由于很明显有些地方设置错误,这里是我的 server.js 文件:
var express = require('express');
var app = express();
var methodOverride = require('method-override');
var mongoose = require('mongoose');
var bodyParser = require('body-parser');
var router = express.Router();
var jwt = require('jsonwebtoken');
var config = require('./config');
var nodemailer = require('nodemailer');
var bcrypt = require('bcrypt-nodejs');
var crypto = require('crypto');
var async = require('async');
var transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: 'email@gmail.com',
pass: 'password'
}
});
// I don't know if both are necessary, used multiple conflicting tutorials
app.use(require('express-session')({
secret: 'secret',
resave: false,
saveUninitialized: false
}));
app.set('superSecret', config.secret);
var Schema = mongoose.Schema,
Person = require('./models/person.js'),
User = require('./models/user.js'),
Event = require('./models/event.js');
var port = process.env.PORT || 8080;
mongoose.connect(config.database);
app.use(bodyParser.json());
app.use(bodyParser.json({ type: 'application/vnd.api+json' }));
app.use(bodyParser.urlencoded({ extended: true }));
app.use(methodOverride('X-HTTP-Method-Override'));
app.use(express.static(__dirname + '/public'));
// routes go here
app.use('/api', router);
app.listen(port);
console.log('gogogo port ' + port);
我不知道我还能在哪里寻找为什么包含路线需要打破常规模式。我的配置文件?我的过程文件?这些是服务器上唯一的其他文件,不包括 /models 和 /routes。
【问题讨论】:
-
试试
app.use('/persons/*', persons); -
没有错误,但仍然是 404'd。 :(
-
我在下面看到您有拼写错误,这解决了问题吗?否则我会调查并弄清楚。
-
不,错字是我复制后编辑的,而不是原件中的问题。我希望这很容易!当我从stackoverflow.com/questions/23923365/… 问题中添加 router.use '发生了什么事' 部分时,这确实有效!它仍然不会读取其余部分,但这至少告诉我文件正在加载,我想。
标签: javascript node.js express