Nodejs关于express4启动问题
Nodejs关于express4启动问题
今天把机器的express3.x更新成了express4 然后新建了一个项目运行ok,启动用的是npm start发现启动的是 bin下面的www 可是我之前的项目并没有这个www,用之前的node app.js也不行 我要怎么做
Nodejs关于express4启动问题
如果你最近将Express版本从3.x升级到了4.x,并且遇到了启动问题,这可能是因为Express 4.x有一些重要的变更。特别是,Express 4.x移除了内置的中间件(如body-parser
, cookie-parser
等),这些中间件需要单独安装。
在Express 4.x中,启动脚本也发生了变化。通常情况下,Express 4.x项目会有一个bin/www
文件,用于配置和启动应用。如果你之前没有这个文件,可能会遇到启动问题。
示例代码
-
创建
bin/www
文件: 如果你还没有bin/www
文件,可以创建一个,并添加以下内容:#!/usr/bin/env node /** * Module dependencies. */ var app = require('../app'); var debug = require('debug')('my-application'); var http = require('http'); /** * Get port from environment and store in Express. */ var port = normalizePort(process.env.PORT || '3000'); 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); }
-
修改
package.json
中的启动脚本: 确保你的package.json
文件中有正确的启动脚本,例如:{ "name": "your-app", "version": "1.0.0", "description": "", "main": "app.js", "scripts": { "start": "node ./bin/www" }, ... }
-
运行项目: 现在你可以使用
npm start
来启动你的应用。
通过以上步骤,你应该能够解决Express 4.x启动的问题。如果仍然有问题,请检查是否有其他依赖项或环境配置问题。
依葫芦画瓢呗。拷贝一份现有的www。之后再导出,引入。:)
顺便问一下 methodOverride 中间件是做什么用的 为什么use了这个就启动不了了,注释他就可以了
针对你提到的Express 3.x 升级到 Express 4.x 后遇到的问题,可以按照以下步骤进行调整。主要的变化在于启动脚本的处理方式。
解决方法
-
修改
package.json
中的start
脚本: 确保你的package.json
文件中的start
脚本指向正确的入口文件。默认情况下,Express 4.x 使用一个名为bin/www
的文件作为启动脚本。"scripts": { "start": "node ./bin/www" }
-
创建或修改
bin/www
文件: 如果你没有bin/www
文件,可以手动创建一个。以下是bin/www
的基本结构:#!/usr/bin/env node /** * Module dependencies. */ var app = require('../app'); var debug = require('debug')('my-application'); var http = require('http'); /** * Get port from environment and store in Express. */ var port = normalizePort(process.env.PORT || '3000'); 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); }
-
确保
app.js
和server.js
正确引用: 在 Express 4.x 中,app.js
通常被用来设置应用配置和中间件。而bin/www
是实际启动服务器的地方。确保app.js
正常导出应用实例,并在bin/www
中正确引用。
通过以上步骤,你应该能够顺利启动 Express 4.x 应用。如果还有其他问题,请检查是否有依赖库版本不兼容等问题。