Azure托pipe的节点应用程序无法find模块“async / each”

现在我已经将应用程序部署到Azure几个星期了。 但是现在,我已经将数据库集成到后端,它将在日志stream中看到这个错误并给浏览器一个500码的代码。

Application has thrown an uncaught exception and is terminated: Error: Cannot find module 'async/each' at Function.Module._resolveFilename (module.js:325:15) at Function.Module._load (module.js:276:25) at Module.require (module.js:353:17) at require (internal/module.js:12:17) at Object.<anonymous> (D:\home\site\wwwroot\node_modules\mongoose\lib\schema.js:11:12) at Module._compile (module.js:409:26) at Object.Module._extensions..js (module.js:416:10) at Module.load (module.js:343:32) at Function.Module._load (module.js:300:12) at Module.require (module.js:353:17) at require (internal/module.js:12:17)

mongoose似乎是问题,所以当我排除它时,一切都很好。 我试着在我的package.json中包含async-each作为一个依赖项,但是这没有帮助(我之前没有看到一个带有/ in的模块,所以在这里猜测)

同样在绝望的时刻,我尝试将同一个应用程序推送到另一个Web App服务,但是甚至无法部署。 WebApiClient超时 – 不pipe这意味着什么。

我部署了完全相同的应用程序Heroku,它完美的作品。

 "use strict"; let express = require('express'); let path = require('path'); let favicon = require('serve-favicon'); let logger = require('morgan'); let cookieParser = require('cookie-parser'); let bodyParser = require('body-parser'); let mongoose = require('mongoose'); let passport = require('passport'); let LocalStrategy = require('passport-local').Strategy; let session = require('express-session'); //routes let home = require('./routes/index'); let register = require('./routes/register'); let members = require('./routes/members'); let login = require('./routes/login'); let logout = require('./routes/logout'); let app = express(); app.locals.courses = require('./data/courses'); // 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(session({secret:'anything'})); app.use(passport.initialize()); app.use(passport.session()); //mongoose passport config require('./db').then(mongoose => { mongoose.Promise = global.Promise; require('./models/user').then(User => { passport.use(new LocalStrategy(User.authenticate())); passport.serializeUser(User.serializeUser()); passport.deserializeUser(User.deserializeUser()); }); }) //allow CORS requests app.use(function (req, res, next) { res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Headers", "X-Requested-With"); next(); }); app.use('/', home); app.use('/register', register); app.use('/members', members); app.use('/login', login); app.use('/logout', logout); // catch 404 and forward to error handler app.use(function (req, res, next) { var err = new Error('Not Found'); err.status = 404; next(err); }); // error handlers // development error handler // will print stacktrace if (app.get('env') === 'development') { app.use(function (err, req, res, next) { res.status(err.status || 500); res.send(err.message); }); } // production error handler // no stacktraces leaked to user app.use(function (err, req, res, next) { res.status(err.status || 500); res.send(err.message); }); module.exports = app; 

我成功地将mongoose部署到了Azure,testing代码也运行良好。 也许你的应用程序将使用在package.json文件的devDependencies部分configuration的任何模块。

作为生产Web服务器的Azure Web应用程序,如果通过git部署应用程序,则默认情况下,部署任务将运行npm install --production ,这将忽略开发mod中的依赖关系。

因此,您可以尝试按照自定义部署脚本生成node.js的deplotment脚本并修改deploy.cmd ,find句子call :ExecuteCmd !NPM_CMD! install --production call :ExecuteCmd !NPM_CMD! install --production和修改来call :ExecuteCmd !NPM_CMD! install call :ExecuteCmd !NPM_CMD! install

同时,您可以按照https://docs.microsoft.com/en-us/azure/nodejs-specify-node-version-azure-apps升级您的node.js和npm版本的Azure Web Apps的运行时,以避免嵌套的node_modules文件夹结构。