2017-06-08 32 views
0

我需要使用路由器来集成应用程序。要定义我用app.use(“/聊天”。该应用程序独立工作,但它不具有路由文件一起工作的应用程序。节点:如何修复路由?

如何解决路由?

/app.js

let express = require('express'), 
    sqlite3 = require('sqlite3'), 
    app = express(), 
    http = require('http').Server(app), 
    io = require('socket.io')(http), 
    iconv = require('iconv-lite'), 
    path = require('path'), 
    sassMiddleware = require('node-sass-middleware'), 
    fs = require('fs'), 
    db = new sqlite3.Database('./chat/history.db'); 
    var routes = require('./chat'); 
    app.use('/chat', routes); 
http.listen(3000); 

聊天/ index.js

let express = require('express'), 
    router = express.Router(), 
    sqlite3 = require('sqlite3'), 
    app = express(), 
    http = require('http').Server(app), 
    io = require('socket.io')(http), 
    iconv = require('iconv-lite'), 
    path = require('path'), 
    sassMiddleware = require('node-sass-middleware'), 
    fs = require('fs'), 
    db = new sqlite3.Database('./history.db'); 

// DB 
if (!fs.existsSync(__dirname + '/history.db')) 
    db.run("CREATE TABLE message (id INTEGER PRIMARY KEY AUTOINCREMENT,txt TEXT)"); 


// VIEWS SETTINGS 
app.set('views', __dirname + '/tpl'); 
app.set('view engine', 'jade'); 
app.use(sassMiddleware({ 
    src: path.join(__dirname, '/tpl'), 
    dest: path.join(__dirname, '/tpl'), 
    debug: true, 
    indentedSyntax: true, 
    outputStyle: 'compressed', 
})); 
app.use(express.static(__dirname + '/tpl')); 


// ROUTER 
router.get("/", function (req, res) { 
    res.render('page', {"name": "Виталий"}) 
}); 


// DOP FUNC 
function addMesToDB(txt) { 
    var stmt = db.prepare("INSERT INTO message (txt) VALUES (?)"); 
    stmt.run(txt); 
    stmt.finalize(); 
} 
function loadLast10() { 
    db.each("SELECT * FROM message LIMIT 10", function(err, row) { 
     io.emit('new message show', row.txt); 
    }); 
} 
function loadAll() { 
    db.each("SELECT * FROM message", function(err, row) { 
     io.emit('new message show', row.txt); 
    }); 
} 
function getDateTime() { 
    var date = new Date(); 
    var hour = date.getHours(); 
    hour = (hour < 10 ? "0" : "") + hour; 
    var min = date.getMinutes(); 
    min = (min < 10 ? "0" : "") + min; 
    var sec = date.getSeconds(); 
    sec = (sec < 10 ? "0" : "") + sec; 
    var year = date.getFullYear(); 
    var month = date.getMonth() + 1; 
    month = (month < 10 ? "0" : "") + month; 
    var day = date.getDate(); 
    day = (day < 10 ? "0" : "") + day; 
    return year + ":" + month + ":" + day + ":" + hour + ":" + min + ":" + sec; 
} 


// EMIT 
let name = ''; 
io.on('connection', function(socket){ 
    io.sockets.on('connection', function (client) {}); 
    socket.on('login', function(msg){ 
     if(msg == '888') name = 'Оксана'; 
     else if(msg == '8888') name = 'Виталий'; 
     if(msg == '888' || msg == '8888') { 
      addMesToDB(getDateTime() + ' <span class="name">Вошел пользователь: ' + name + '</span>'); 
      loadLast10(); 
     } 
    }); 
    socket.on('loadAll', function(msg){ 
     loadAll(); 
    }); 
    socket.on('new message send', function(msg){ 
     io.emit('new message show', getDateTime() + ' <span class="name">' + name + ':</span> <span class="msg">' + msg + '</span>'); 
     addMesToDB(getDateTime() + ' <span class="name">' + name + ':</span> ' + msg); 
    }); 
    socket.on('disconnect', function() { 
     io.emit('new message show', getDateTime() + ' <span class="name">Вышел пользователь: ' + name + '</span>'); 
     addMesToDB(getDateTime() + ' <span class="name">Вышел пользователь: ' + name + '</span>'); 
    }); 
}); 

module.exports = router; 

错误:

Error: No default engine was specified and no extension was provided. 
    at new View (C:\chat2\chat2\node_modules\express\lib\view.js:62:11) 
    at Function.render (C:\chat2\chat2\node_modules\express\lib\application.js:570:12) 
    at ServerResponse.render (C:\chat2\chat2\node_modules\express\lib\response.js:971:7) 
    at C:\chat2\chat2\chat\index.js:41:9 
    at Layer.handle [as handle_request] (C:\chat2\chat2\node_modules\express\lib\router\layer.js:95:5) 
    at next (C:\chat2\chat2\node_modules\express\lib\router\route.js:137:13) 
    at Route.dispatch (C:\chat2\chat2\node_modules\express\lib\router\route.js:112:3) 
    at Layer.handle [as handle_request] (C:\chat2\chat2\node_modules\express\lib\router\layer.js:95:5) 
    at C:\chat2\chat2\node_modules\express\lib\router\index.js:281:22 
    at Function.process_params (C:\chat2\chat2\node_modules\express\lib\router\index.js:335:12) 

回答

0

使用res.render,你必须指定根应用视图引擎:

app.set('view engine', 'jade') 

更多细节,你可以参考this document

+0

它不工作。替换app.set('views',__dirname +'/ tpl');在app.set('views engine',__dirname +'/ tpl');你还能尝试什么?错误:没有指定默认引擎,也没有提供扩展名。 – VINET

+0

确实/ tpl存在作为一个文件夹关闭聊天? –

+0

方法是对的。请看这里。 https://github.com/StekolschikovV/chat – VINET

1

通过你们的git回购去了。您需要在节点模块和应用程序中包含jade。我会发出对您的回购拉请求,但简短的回答是:更新你的聊天/ index.js以下几点:

app.set('views', __dirname + '/tpl'); 
app.engine('jade', require('jade').renderFile); 
app.set('view engine', 'jade'); 

您通过app.engine()函数,而不是应用程序指定一个引擎。组()。然后,您可以将视图(而不是视图)引擎设置为玉。

完整代码:(index.js)

let express = require('express'), 
    app = express(), 
    http = require('http').Server(app), 
    cfenv = require('cfenv'), 
    appEnv = cfenv.getAppEnv();; 

    app.set('appName', 'chat'); 
    app.set('port', appEnv.port); 
    app.use('/', require("./chat/index")); 

    var server = app.listen(app.get('port'), function() {console.log(app.get('appName')+' is Listening on port %d', server.address().port);}); 

(/chat/index.js)

let express = require('express'), 
    router = express.Router(), 
    sqlite3 = require('sqlite3'), 
    app = express(), 
    http = require('http').Server(app), 
    io = require('socket.io')(http), 
    iconv = require('iconv-lite'), 
    path = require('path'), 
    sassMiddleware = require('node-sass-middleware'), 
    fs = require('fs'), 
    db = new sqlite3.Database('./history.db'); 

// DB 
if (!fs.existsSync(__dirname + '/history.db')) 
    db.run("CREATE TABLE message (id INTEGER PRIMARY KEY AUTOINCREMENT,txt TEXT)"); 


// VIEWS SETTINGS 
console.log("__dirname is: "+__dirname); 

app.set('views', __dirname + '/tpl'); 
app.engine('jade', require('jade').renderFile); 
app.set('view engine', 'jade'); 
app.use(sassMiddleware({ 
    src: path.join(__dirname, '/tpl'), 
    dest: path.join(__dirname, '/tpl'), 
    debug: true, 
    indentedSyntax: true, 
    outputStyle: 'compressed', 
})); 
//app.use(express.static(__dirname + '/tpl')); 


// ROUTER 
router.get("/", function (req, res) { 
    try{ 
     res.render('page'); 
    } catch(err){ 
     console.log(err) 
    } 


}); 


// DOP FUNC 
function addMesToDB(txt) { 
    var stmt = db.prepare("INSERT INTO message (txt) VALUES (?)"); 
    stmt.run(txt); 
    stmt.finalize(); 
} 
function loadLast10() { 
    db.each("SELECT * FROM message LIMIT 10", function(err, row) { 
     io.emit('new message show', row.txt); 
    }); 
} 
function loadAll() { 
    db.each("SELECT * FROM message", function(err, row) { 
     io.emit('new message show', row.txt); 
    }); 
} 
function getDateTime() { 
    var date = new Date(); 
    var hour = date.getHours(); 
    hour = (hour < 10 ? "0" : "") + hour; 
    var min = date.getMinutes(); 
    min = (min < 10 ? "0" : "") + min; 
    var sec = date.getSeconds(); 
    sec = (sec < 10 ? "0" : "") + sec; 
    var year = date.getFullYear(); 
    var month = date.getMonth() + 1; 
    month = (month < 10 ? "0" : "") + month; 
    var day = date.getDate(); 
    day = (day < 10 ? "0" : "") + day; 
    return year + ":" + month + ":" + day + ":" + hour + ":" + min + ":" + sec; 
} 


// EMIT 
let name = ''; 
io.on('connection', function(socket){ 
    io.sockets.on('connection', function (client) {}); 
    socket.on('login', function(msg){ 
     if(msg == '888') name = 'Оксана'; 
     else if(msg == '8888') name = 'Виталий'; 
     if(msg == '888' || msg == '8888') { 
      addMesToDB(getDateTime() + ' <span class="name">Вошел пользователь: ' + name + '</span>'); 
      loadLast10(); 
     } 
    }); 
    socket.on('loadAll', function(msg){ 
     loadAll(); 
    }); 
    socket.on('new message send', function(msg){ 
     io.emit('new message show', getDateTime() + ' <span class="name">' + name + ':</span> <span class="msg">' + msg + '</span>'); 
     addMesToDB(getDateTime() + ' <span class="name">' + name + ':</span> ' + msg); 
    }); 
    socket.on('disconnect', function() { 
     io.emit('new message show', getDateTime() + ' <span class="name">Вышел пользователь: ' + name + '</span>'); 
     addMesToDB(getDateTime() + ' <span class="name">Вышел пользователь: ' + name + '</span>'); 
    }); 
}); 

module.exports = router; 
+0

这是否解决了您的问题? –