我有一个 Express 站点,正在尝试将其转换为使用 paths.js 文件来清理内容。我收到一个类型错误,解释如下。我已阅读this和 this但我还是不明白。目前该网站使用以下几行:
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 is not a function
以下是routes.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
is undefined,因为您的 server
变量不是一个 Express 实例。
你应该做的是打破链条,并定义如下:
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
关于javascript - 从.use(req,res)更改为使用routes.js文件时,express应用程序出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50030287/