我在node.js中使用express 3创建文件上传功能.
我想抓取图像的文件扩展名.所以我可以重命名该文件,然后将文件扩展名附加到它.
app.post('/upload', function(req, res, next) {
var is = fs.createReadStream(req.files.upload.path),
fileExt = '', // I want to get the extension of the image here
os = fs.createWriteStream('public/images/users/' + req.session.adress + '.' + fileExt);
});
Run Code Online (Sandbox Code Playgroud)
如何在node.js中获取图像的扩展名?
假设我有这个代码来分隔expressjs中的路由:
module.exports = function(express,app,client) {
app.get('/', function(req,res,next) {
var query = 'SELECT * FROM users LIMIT 10';
var user = client.query(query, function (err, results, fields) {
res.render('index', {
title: 'test',
users: results
});
client.end();
});
});
}
Run Code Online (Sandbox Code Playgroud)
并要求app.js:
require('./controllers/routes.js')(express,app,client);
Run Code Online (Sandbox Code Playgroud)
1)如何以最佳方式将数据库查询分成新文件?
即使我将db逻辑分开,这个文件也会变得非常大.
2)分隔路线的好方法是什么?也许单独的模块?然后要求他们全部进入app.js?
我似乎找不到在expressjs框架中设置安全cookie的方法.有没有选择在某个地方这样做?
我是节点和表达的新手,我有一个关于使用mysql的问题.我有一个登录到'/ login'的登录表单.我使用node-mysql模块.
app.get('/site', function(req, res){
if (req.session.is_logged_in === true) {
res.render('site/start', {
title: 'News'
});
} else {
res.redirect('/');
}
});
app.post('/login', function(req, res){
client.query('SELECT id, user_name FROM user WHERE email="' + req.body.login + '" AND password="' + Hash.sha1(req.body.password) + '"',
function (err, results, fields) {
if (err) {
throw err;
}
if (results[0]) {
req.session.userInfo = results[0];
req.session.is_logged_in = true;
res.render('site/start', {
title: 'News'
});
}
else {
res.redirect('/');
}
}
);
});
Run Code Online (Sandbox Code Playgroud)
这是一个很好的方法吗?我可以继续这样吗?并且sql查询是以某种方式逃脱的,还是我必须自己编写该功能?
最后一个问题:我重写一个网站,我使用了mysql数据库.将它改成mongodb有什么好处吗?
任何帮助,将不胜感激
提前致谢
乔治
比如说MySQL数据库存在已知的安全问题.这如何适用于NoSQL数据库?例如注射,xss等.使用NoSQL数据库时你必须采取哪些安全措施?特别是关于MongoDB(使用node-mongodb-native)和Node.js(使用Express)
如果是这样,是否有任何Node/Express模块可以帮助防止这种情况发生?
我使用nodejs bcrypt库来获得更好的密码保护.
我不确定我究竟该如何使用它,但到目前为止我得到了这个:
//A module containing this login function:
login: function(credentials,req,res) {
//"credentials" is containing email and password from login form
var query = 'SELECT password, email FROM users WHERE email = ? LIMIT 1';
client.query(query,[credentials.email], function(err, results) {
if (results[0]) {
//Compare passwords
if (bcrypt.compareSync(credentials.password, results[0].password)) {
//Set session data and redirect to restricted area
}
}
});
}
Run Code Online (Sandbox Code Playgroud)
我删除了示例中的所有错误处理,以便更容易阅读代码.
1.这工作,我能够登录和设置会话.但这就是它的全部吗?我错过了什么吗?
2.生成哈希时看起来就像密码前面有盐一样.我不得不在db中保存盐吗?
任何帮助赞赏
我正在使用codeigniter创建一个应用程序,并为实时内容实现nodejs.我想检查用户是否使用nodejs登录.使用下面的代码,我可以在nodejs服务器中获取codeigniter会话ID:
var server = require('https').createServer(options, function(request, response){
var cookies=(function(str){
var result={};
str.split(/;\s+/).forEach(function(e){
var parts=e.split(/=/,2);
result[parts[0]]=parts[1]||'';
});
return result;
})(request.headers.cookie),
sessionCookieName='ci_session',
sessionId=cookies[sessionCookieName]||'';
console.log(sessionId);
}).listen(8080);
Run Code Online (Sandbox Code Playgroud)
codeigniter会话存储在数据库中,加密设置为true.并且sess_match_ip = TRUE,sess_match_useragent = TRUE;
现在我的问题是,检查用户是否登录的好方法是什么?我已经安装了node-mysql客户端.我知道CI做的事情如下:
SELECT *
FROM (`ci_sessions`)
WHERE `session_id` = 'blabla'
AND `ip_address` = '127.0.0.1'
AND `user_agent` = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/535.2
(KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2'
Run Code Online (Sandbox Code Playgroud)
如何解密会话ID并检查我是否从db获得匹配?
提前致谢
乔治
有没有一种在Express 3.0中使用Socket.io会话的好方法?一种以安全的方式获取客户会话ID的方法?这样我就可以向会员特定的会员发送通知,并从会员到会员进行私聊?
我在Express 3.0中使用MySQL商店
supertest有没有办法使用and检查响应中是否存在某个标头jest?
例如expect(res.headers).toContain('token')
我正在尝试使用 ID 的 URL 参数制作一个简单的路由器。如localhost/profile/123能正常工作,但如果我删除preventDefault,这样的链接工作正常,或刷新浏览器,或直接进入该相同的URL,这是行不通的,而浏览器外观的JavaScript文件main.js中localhost/profile,而不是产地localhost。没有参数的路由工作正常。这里发生了什么?
const router = async path => {
if(!path) path = location.pathname
const segment = route.split('/')
path = '/' + segment[1]
const parameter = segment[2]
const routes = {
'/' : { handler: home },
'/about' : { handler: about },
'/profile' : { handler: profile },
}
render(html`
<main>${await routes[path].handler(parameter ? parameter : '')}</main>
`, document.body)
}
const main = async () => {
await …Run Code Online (Sandbox Code Playgroud)