[英]Error in express app when changing from .use(req,res) to using a routes.js file
我有一個快遞網站,正在嘗試將其轉換為使用route.js文件進行清理。 我收到TypeError,如下所述。 我已閱讀這個和這個 ,但我仍然無法弄清楚。 當前,該站點使用以下行:
const server = express()
.set('view engine', 'ejs') // set up ejs for templating
.use(flash()) // use connect-flash for flash messages stored in session
.use((req, res) => res.render('../views/pages/indextimewithall.ejs', {stockSearched :"X",
activeStocks: [],
addingError:false}) )
.listen(port);
const wss = new SocketServer({ server });
wss.on('connection', (ws) => {
console.log('Client connected');
ws.on('close', () => console.log('Client disconnected'));
});
setInterval(() => {
wss.clients.forEach((client) => {
client.send(new Date().toTimeString());
});
}, 1000);
但是當我將其更改為:
const server = express()
.set('view engine', 'ejs') // set up ejs for templating
.use(flash()) // use connect-flash for flash messages stored in session
.listen(port);
require('./app/routes.js')(server);
const wss = new SocketServer({ server });
wss.on('connection', (ws) => {
console.log('Client connected');
ws.on('close', () => console.log('Client disconnected'));
});
setInterval(() => {
wss.clients.forEach((client) => {
client.send(new Date().toTimeString());
});
}, 1000);
..我收到TypeError:app.get不是一個函數
以下是route.js文件的內容:
// app/routes.js
module.exports = function(app) {
app.get('/', function(req, res) {
var myStocks = require('./models/myStock');
var showStocks = function(err, data){
res.render('pages/indextimewithall.ejs', {
stockSearched :"X",
activeStocks: [],
addingError:false
});
}
myStocks.find({isActive:true}).exec(showStocks);
});
};
感謝您的任何建議。
您的清理工作就很好了(盡管可讀性和可維護性是一個大問題……)。 這是給您的一個大陷阱:
app.listen
方法不可鏈接,但app.use
或app.METHOD
系列可以。 這意味着該方法不會在最后返回自身。 因此,您將獲得未定義的app.get
,因為您的server
變量不是快速實例。
您應該做的是打破鏈條,並將其定義如下:
const app = express();
app.set('view engine', 'ejs'); // set up ejs for templating
app.use(flash()); // use connect-flash for flash messages stored in session
require('./app/routes.js')(app); // not recommended to clean up like this way though
app.listen(port);
const wss = new SocketServer({ server: app });
wss.on('connection', (ws) => {
console.log('Client connected');
ws.on('close', () => console.log('Client disconnected'));
});
setInterval(() => {
wss.clients.forEach((client) => {
client.send(new Date().toTimeString());
});
}, 1000);
注意,在上面,我將您的變量server
重命名為app
。 只是為了遵循慣例。
您可以通過運行以下方法來知道方法是否可鏈接:
const app = express();
console.log(app === app.use((req, res, next) => next))); // true
console.log(app === app.listen(3000)); // false
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.