Node.js TypeError:Router.use()需要中间件函数

Node.js TypeError:Router.use()需要中间件函数,node.js,web-services,rest,express,Node.js,Web Services,Rest,Express,我正在使用express通过节点开发RESTAPI。当我尝试运行应用程序时,出现以下错误: Contacts.js的代码 var fs = require('fs'); //Read Json file function read_json_file() { var file = './data/contacts.json'; return fs.readFileSync(file); } //Parse the the file da exports.list = functi

我正在使用express通过节点开发RESTAPI。当我尝试运行应用程序时,出现以下错误:

Contacts.js的代码

var fs = require('fs');

//Read Json file
function read_json_file() {
   var file = './data/contacts.json';
   return fs.readFileSync(file);
}

//Parse the the file da
exports.list = function() {
   return JSON.parse(read_json_file());
};

exports.query = function(number) {
   var json_result = JSON.parse(read_json_file());
   var result = json_result.result;
   for (var i = 0; i < result.length; i++) {
      var contact = result[i];
      if (contact.primarycontactnumber === number)    {
         return contact;
      }
   }
   return null;
};

exports.query_by_arg = function(arg, value) {
   var json_result = JSON.parse(read_json_file());
   var result = json_result.result;
   for (var i = 0; i < result.length; i++) {
      var contact = result[i];
      if (contact[arg] === value) {
         return contact;
      }
   }
   return null;
};

exports.list_groups = function() {
  var json_result = JSON.parse(read_json_file());
  var result       = json_result.result;
  var resultArray  = [];
  for (var i = 0; i < result.length; i++) {
   var groups = result[i].groups;
   for (var index = 0; index < groups.length; index++) {
      if (resultArray.indexOf(groups[index]) === -1) {
         resultArray.push(groups[index]);
      }
   }
}
return resultArray;
};

exports.get_members = function(group_name) {
   var json_result = JSON.parse(read_json_file());
   var result = json_result.result;
   var resultArray = [];
   for (var i = 0; i < result.length; i++) {
      if (result[i].groups.indexOf(group_name) > -1) {
         resultArray.push(result[i]);
      }
   }
   return resultArray;
};
var fs=require('fs');
//读取Json文件
函数read_json_file(){
var文件='./data/contacts.json';
返回fs.readFileSync(文件);
}
//解析文件da
exports.list=函数(){
返回JSON.parse(读取JSON文件());
};
exports.query=函数(编号){
var json_result=json.parse(read_json_file());
var result=json_result.result;
对于(变量i=0;i-1){
结果ray.push(结果[i]);
}
}
返回结果数组;
};
当我注释掉
应用程序时,使用('/contacts',contacts)行在我的
app.js
然后它就可以正常工作了。否则我就有这个问题了。我已经尝试了很多去挖掘它背后的原因,但是失败了。有人能帮我吗。

根据,
应用程序。使用
用于注册中间件;您的contacts.js不包含任何中间件,它只包含您在实际/contacts路由中使用的helper函数

正如您所指出的,对它进行注释可以使一切正常工作。不需要做任何其他事情:)


您还需要在路由之后移动404处理程序,否则它将在每个路由之前运行,因此您将看到404。有关更多信息,请参阅文档。

谢谢阮,实际上我是node.js的新手。:)。我应该如何以及在何处包括所需的中间件来实现这一点?您不需要,您已经
需要
d您的联系人模块,这就足够了。不需要那个
应用程序。完全可以使用
呼叫。这个?应用程序使用(“/联系人”,联系人);对contacts.js是一个标准的节点模块,它不为Express导出任何中间件,因此无需
使用它。删除该行后,该url将显示:“Error:Not Found”
  var express        = require('express');
  var http           = require('http');
  var path           = require('path');
  var favicon        = require('serve-favicon');
  var logger         = require('morgan');
  var cookieParser   = require('cookie-parser');
  var bodyParser     = require('body-parser');
  var nodemailer     = require('nodemailer');
  var url            = require('url');

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

  var app            = express();

  // view engine setup
  app.set('views', path.join(__dirname, 'views'));
  app.set('view engine', 'jade');
  app.set('port', process.env.PORT || 3000);

  // uncomment after placing your favicon in /public
  //app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
  app.use(logger('dev'));
  app.use(bodyParser.json());
  app.use(bodyParser.urlencoded({ extended: false }));
  app.use(cookieParser());
  app.use(express.static(path.join(__dirname, 'public')));
  app.use('/', routes);
  app.use('/contacts', contacts);

  // catch 404 and forward to error handler
  app.use(function(req, res, next) {
    var err    = new Error('Not Found');
    err.status = 404;
    next(err);
  });

  app.get('/contacts',function(request, response){
    var get_params = url.parse(request.url, true).query;
    if (Object.keys(get_params).length == 0)
    {
      response.setHeader('content-type', 'application/json');
      response.end(JSON.stringify(contacts.list()));
    }
    else
    {
     response.setHeader('content-type', 'application/json');
     stringify(contacts.query_by_arg(get_params.arg, get_params.value));
   }
 }); 


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


  module.exports = app;
var fs = require('fs');

//Read Json file
function read_json_file() {
   var file = './data/contacts.json';
   return fs.readFileSync(file);
}

//Parse the the file da
exports.list = function() {
   return JSON.parse(read_json_file());
};

exports.query = function(number) {
   var json_result = JSON.parse(read_json_file());
   var result = json_result.result;
   for (var i = 0; i < result.length; i++) {
      var contact = result[i];
      if (contact.primarycontactnumber === number)    {
         return contact;
      }
   }
   return null;
};

exports.query_by_arg = function(arg, value) {
   var json_result = JSON.parse(read_json_file());
   var result = json_result.result;
   for (var i = 0; i < result.length; i++) {
      var contact = result[i];
      if (contact[arg] === value) {
         return contact;
      }
   }
   return null;
};

exports.list_groups = function() {
  var json_result = JSON.parse(read_json_file());
  var result       = json_result.result;
  var resultArray  = [];
  for (var i = 0; i < result.length; i++) {
   var groups = result[i].groups;
   for (var index = 0; index < groups.length; index++) {
      if (resultArray.indexOf(groups[index]) === -1) {
         resultArray.push(groups[index]);
      }
   }
}
return resultArray;
};

exports.get_members = function(group_name) {
   var json_result = JSON.parse(read_json_file());
   var result = json_result.result;
   var resultArray = [];
   for (var i = 0; i < result.length; i++) {
      if (result[i].groups.indexOf(group_name) > -1) {
         resultArray.push(result[i]);
      }
   }
   return resultArray;
};