[英]Error setting up simple server with middleware on node.js express
I am reasonably new to node express and am trying to set up a simple server with middleware to handle routing. 我对Node Express很陌生,并且正在尝试使用中间件设置一个简单的服务器来处理路由。 The error I'm getting is
TypeError: Router.use() requires a middleware function but got a Object
The error is because of the app.get('/', require(routes));
我得到的错误是
TypeError: Router.use() requires a middleware function but got a Object
错误是由于app.get('/', require(routes));
line. 线。 Does anyone know what I need to put here as a middleware function?
有人知道我需要把这里作为中间件功能吗?
//server.js
http = require('http');
let port = process.env.PORT || 3000;
let host = '127.0.0.1';
var express = require('express');
var app = express();
var routes = './api/routes/positions';
app.use('/', require(routes));
http.createServer(app).listen(port);
console.log('Listening at http://' + host + ':' + port);
//#########################
//positions.js
const express = require('express');
var router = express.Router();
router.get('/', (err, req, res, next) => {
res.status(200).json({
message: "hello from server"
});
});
module.exports.router;
#!/usr/bin/env node
/**
* Module dependencies.
*/
var app = require('../app');
var debug = require('debug')('ag:server');
var http = require('http');
/**
* Get port from environment and store in Express.
*/
var port = normalizePort(process.env.PORT || '3002');
app.set('port', port);
/**
* Create HTTP server.
*/
var server = http.createServer(app);
/**
* Listen on provided port, on all network interfaces.
*/
server.listen(port);
server.on('error', onError);
server.on('listening', onListening);
/**
* Normalize a port into a number, string, or false.
*/
function normalizePort(val) {
var port = parseInt(val, 10);
if (isNaN(port)) {
// named pipe
return val;
}
if (port >= 0) {
// port number
return port;
}
return false;
}
/**
* Event listener for HTTP server "error" event.
*/
function onError(error) {
if (error.syscall !== 'listen') {
throw error;
}
var bind = typeof port === 'string'
? 'Pipe ' + port
: 'Port ' + port;
// handle specific listen errors with friendly messages
switch (error.code) {
case 'EACCES':
console.error(bind + ' requires elevated privileges');
process.exit(1);
break;
case 'EADDRINUSE':
console.error(bind + ' is already in use');
process.exit(1);
break;
default:
throw error;
}
}
/**
* Event listener for HTTP server "listening" event.
*/
function onListening() {
var addr = server.address();
var bind = typeof addr === 'string'
? 'pipe ' + addr
: 'port ' + addr.port;
debug('Listening on ' + bind);
}
You are exporting the module in wrong way from positions.js
file. 您正在从
positions.js
文件中以错误的方式导出模块。
you need to write 你需要写
module.exports = router
instead of, 代替,
module.exports.router
What you have written will bind a new key router
to exports
object, but haven't assigned any value to it and hence it goes back to default the empty object {}
. 您编写的内容会将一个新的密钥
router
绑定到exports
对象,但尚未为其分配任何值,因此它将返回到默认的空对象{}
。
Now express was expecting a function but got object and hence the error. 现在express期望功能,但是得到了对象,因此出现了错误。 You can verify it by checking the
require(routes)
in server.js
file. 您可以通过检查
server.js
文件中的require(routes)
来验证它。
Please study this formatted version of your code. 请研究此格式的代码。
const http = require('http');
const express = require('express');
const routes = require('./api/routes/positions');
const port = process.env.PORT || 3000;
const host = '127.0.0.1';
const app = express();
app.use('/', routes);
http.createServer(app).listen(port);
console.log('Listening at http://' + host + ':' + port);
If you want to read more project, you can read this boilerplate written by me. 如果您想阅读更多项目,可以阅读我写的这个样板 。 It's bit old, but may serve you well.
它有点旧,但可能会为您服务。
Try this one: 试试这个:
//server.js
let port = process.env.PORT || 3000;
let host = '127.0.0.1';
var express = require('express');
var app = express();
var routes = require('./api/routes/positions');
http.createServer(app).listen(port);
console.log('Listening at http://' + host + ':' + port);
//#########################
//positions.js
const express = require('express');
var router = express.Router();
router.use('/', routes);
app.use('/', routes);
router.get('/', (err, req, res, next) => {
res.status(200).json({
message: "hello from server"
});
});
module.exports = router;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.