![](/img/trans.png)
[英]How can re-write JS file with data coming from server with node.js (express server)?
[英]Passing data from router to server file node.js express
我正在嘗試使用 node.js 構建一個 Web 應用程序,並且我想將數據從我的路由器(處理表單的文件)傳遞到我的服務器文件,該文件將實際向連接的其他用戶發出事件。
路由器.js
module.exports=function(app) {
const express = require('express');
const User = require("./public/classes/User");
const router = express.Router();
const {check, validationResult} = require('express-validator');
const {matchedData} = require('express-validator/filter');
var userlist = new Array();
router.get('/', (req, res) => {
res.render('index', {
data: {},
errors: {}
})
});
router.post('/enter', [
check('username')
.isLength({min: 1})
.withMessage('Username is required').trim() //implement personalized check
], (req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.render('index', {
data: req.body,
errors: errors.mapped()
})
}
const data = matchedData(req)
});
return router;
//MOVE TO SUPPORT
function find(name) {
return 1;
}
}
服務器.js
const express = require('express');
const layout = require('express-layout');
const app = express();
var server = require('http').createServer(app);
var io=require('socket.io')(server);
const routes = require('./router')(app);
const bodyParser = require('body-parser');
var fs = require("fs");
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
const middleware = [
layout(),
express.static(path.join(__dirname, 'public')),
bodyParser.urlencoded(),
];
app.use(middleware);
app.use('/', routes);
app.use((req, res, next) => {
res.status(404).send("Sorry can't find that!");
});
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).send('Something broke!');
});
io.on('connect', onConnect);
function onConnect(socket) {
var contents = fs.readFileSync("./public/rooms.json");
let rooms = JSON.parse(contents);
socket.emit('parse',rooms);
socket.on('join',function (name, room) {
console.log(name+" "+ room);
socket.join(room);
socket.user=name;
socket.room=room;
})
}
server.listen(3000, () => {
console.log(`App running at http://localhost:3000`);
});
我想將我的 post 請求的處理數據傳遞給服務器,我該怎么做?
如果您只想將在路由處理程序中處理的數據發送到客戶端,則無需先將其發送到server
文件,您可以從路由處理程序發出。 為此,您必須存儲對套接字對象的引用,以便您可以在除套接字連接回調函數之外的其他地方使用它。
更新server.js
的onConnect
函數,以在 app locals 中存儲對套接字的引用:
function onConnect(socket) {
// Store the socket object in app locals
app.locals.socket = socket;
var contents = fs.readFileSync("./public/rooms.json");
let rooms = JSON.parse(contents);
socket.emit('parse',rooms);
socket.on('join',function (name, room) {
console.log(name+" "+ room);
socket.join(room);
socket.user=name;
socket.room=room;
})
}
在路由處理程序中,您可以隨時發送數據:
router.post('/enter', [
check('username')
.isLength({ min: 1 })
.withMessage('Username is required').trim() //implement personalized check
], (req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.render('index', {
data: req.body,
errors: errors.mapped()
})
}
const data = matchedData(req)
// Emit your data here:
app.locals.socket.emit("data", data);
});
可能你忘了從 route.js 導出路由。 使用module.export = route;
在 route.js 文件中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.