我是nodejs / express的新手,并且已经关注了博客文章"Build Node.js RESTful APIs in 10 Minutes"。它提供了创建简单REST api的详细步骤。完成文章中提到的每个代码后,应用程序都没有正常工作,它只会返回
{
"url": "/transactions not found"
}
我发现罪魁祸首是在文章的最后部分,它告诉我将这一行添加到server.js:
完成所有这些后,如果我们进入错误的路线会发生什么?说 您输入了“http://localhost:3000/task”,它会回复一条消息 “无法获得/任务”。让我们添加可以使用的快速中间件 返回更多互动信息。
app.use(function(req, res) {
res.status(404).send({url: req.originalUrl + ' not found'})
});
无论我的api返回什么,似乎都会将HTTP状态代码硬编码为404。删除此行后,该应用程序将返回有意义的响应。
这是我的server.js:
var express = require('express'),
app = express(),
port = process.env.PORT || 3000,
mongoose = require('mongoose'),
Transaction = require('./api/models/transactionModel'), //created model loading here
bodyParser = require('body-parser');
// mongoose instance connection url connection
mongoose.Promise = global.Promise;
mongoose.connect('mongodb://localhost/transactionDb');
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(function(req, res) {
res.status(404).send({url: req.originalUrl + ' not found'})
});
var routes = require('./api/routes/transactionRoutes'); //importing route
routes(app); //register the route
app.listen(port);
console.log('Transaction List RESTful API server started on: ' + port);
控制器:
'use strict';
var mongoose = require('mongoose'),
Transaction = mongoose.model('Transactions');
exports.list_all_transactions = function (req, res) {
Transaction.find({}, function (err, transaction) {
if (err)
res.send(err);
res.json(transaction);
});
};
exports.create_a_transaction = function (req, res) {
var new_transaction = new Transaction(req.body);
new_transaction.save(function (err, transaction) {
if (err)
res.send('Error creating a new transaction!');
res.json(transaction);
});
};
答案 0 :(得分:1)
它没有覆盖您的回复,只是因为它在触摸您的api之前在中间返回。请求流程从上到下运行,例如上面的代码:
[coming request] --> bodyParser --> bodyParser --> 404 handler (returned here) -x-> api (cannot reach).
只有use()
404中间件到底部,一切正常。
mongoose.Promise = global.Promise;
mongoose.connect('mongodb://localhost/transactionDb');
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
var routes = require('./api/routes/transactionRoutes'); //importing route
routes(app); //register the route
app.use(function(req, res) {
res.status(404).send({url: req.originalUrl + ' not found'})
});
答案 1 :(得分:1)
我怀疑你的
app.use(function(req, res) {
res.status(404).send({url: req.originalUrl + ' not found'})
});
应该更低:服务器首先找到那段代码,而实际的路由稍后加载。
app.use表示它始终执行该代码,因此它通过发送404错误并说它无法找到该URL来处理每个请求。
将该代码放在所有其他路由下(位于app.listen(port)上方),它应该可以正常工作!