【问题标题】:Node.js restful webservice using express and mongoose. Routing not working使用 express 和 mongoose 的 Node.js RESTful Web 服务。路由不工作
【发布时间】:2017-07-20 03:38:05
【问题描述】:

我正在尝试按照本教程构建一个 RESTful 网络服务: https://www.codementor.io/olatundegaruba/nodejs-restful-apis-in-10-minutes-q0sgsfhbd

返回一个CANNOT GET/reports错误没有用... 我正在尝试学习 node.js,但在任何地方都找不到错误,而且我尝试的所有方法都不起作用。

另外,当我调用服务器时,它会到达 index.js,它会打印一个“嘿”。这不是应该先到达 server.js 吗?

这是我的代码:

服务器.js

var express = require('express'),
app = express(),
port = process.env.PORT || 3000,
mongoose = require('mongoose'),
Report = require('./api/models/reportModel.js'),
bodyParser = require('body-parser');

mongoose.Promise = global.Promise;
mongoose.connect('mongodb://localhost/server');


app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());


var routes = require('./api/routes/reportRoute.js');
routes(app);



app.listen(port);


console.log('Report RESTful API server started on: ' + port);

reportRoute.js

  'use strict';
  module.exports = function(app) {
  var reports = require('../controllers/reportController.js');


    // report Routes
  app.route('/reports')
    .get(reports.list_all_reports)
    .post(reports.create_a_report);


  app.route('/reports/:reportId').get(reports.read_a_report)
    .put(reports.update_a_report)
    .delete(reports.delete_a_report);
};

reportController.js

    'use strict';


var mongoose = require('mongoose'),
  Report = mongoose.model('Reports');

exports.list_all_reports = function(req, res) {
  Report.find({}, function(err, report) {
    if (err)
      res.send(err);
    res.json(report);
  });
};




exports.create_a_report = function(req, res) {
  var new_report = new Report(req.body);
  new_report.save(function(err, report) {
    if (err)
      res.send(err);
    res.json(report);
  });
};


exports.read_a_report = function(req, res) {
  Report.findById(req.params.reportId, function(err, report) {
    if (err)
      res.send(err);
    res.json(report);
  });
};


exports.update_a_report = function(req, report) {
  Report.findOneAndUpdate({_id: req.params.taskId}, req.body, { new: true }, function(err, report) {
    if (err)
      res.send(err);
    res.json(report);
  });
};


exports.delete_a_report = function(req, res) {


  Report.remove({
    _id: req.params.reportId
  }, function(err, report) {
    if (err)
      res.send(err);
    res.json({ message: 'Report successfully deleted' });
  });
};

感谢您的帮助...

编辑:

index.js

const express = require('express');
const app = express();
var route = require('./api/routes/reportRoute');

app.get('/', function(req, res) {
  res.send('HEY!');
})
app.listen(3000, function(){console.log('Server running on port 3000')});

【问题讨论】:

  • 就是你写的所有代码。我认为你没有正确连接路由器文件
  • 我的路由器缺少什么?
  • 为了让这个简单,只需在 app.js 中编辑。在app.use(bodyParser.json()); 之后添加app.get('/test', function(req, res) { res.jsonp({data : 'hello'});}) 然后尝试 localhost:port/test 并告诉我们发生了什么?
  • 它返回 Cannot GET /test。恐怕它没有到达 server.js...
  • 我认为您的服务器文件有问题。

标签: javascript node.js rest api express


【解决方案1】:

您尚未发布您的reportController.js,但如果函数 list_all_reports 未设置响应正文,则会出现此问题。例如,添加

res.json({hello: "world"});

到处理函数应该使它工作。

【讨论】:

  • 刚刚添加...谢谢您的回答。我的函数正在返回 report 但我的数据库是空的,这可能是问题吗?
  • 您能否将exports.list_all_reports 函数替换为res.json({hello: "world"}); 来进行完整性检查?
  • 刚试过这个,没用...得到相同的响应:CANNOT GET/reports
猜你喜欢
  • 2017-04-29
  • 2017-06-14
  • 2014-05-17
  • 1970-01-01
  • 2014-05-16
  • 1970-01-01
  • 1970-01-01
  • 2015-01-30
  • 1970-01-01
相关资源
最近更新 更多