我正在使用Node.JS,Express,MongoDB和EJS.我有一个关于一个数据库下的多个MongoDB集合的问题,并调用它们在前端使用.我有3个集合,经过大量研究后未发现如何调用多个集合而没有错误.
我知道将一切存储在一个集合下并不是一个问题,但我觉得最好的方法是按类别将它们分开.这是我的db/collection调用:
app.use(express.bodyParser());
var MongoClient = require('mongodb').MongoClient;
app.get('/', function(req, res){
MongoClient.connect("mongodb://localhost:27017/michael", function(err, db) {
if(!err) {
console.log("We are connected");
}
db.collection("portfolio", function(err, collection) {
collection.find().sort({order_num: 1}).toArray(function(err, result) {
var portfolio = [];
if (err) {
throw err;
} else {
for (i=0; i<result.length; i++) {
portfolio[i] = result[i];
}
res.render('index.html', {portfolio: portfolio});
}
});
});
});
});
Run Code Online (Sandbox Code Playgroud)
我怎么能多次调用其他集合,例如"约"集合等?我尝试添加另一个......
db.collection("about", function(err, collection) {
Run Code Online (Sandbox Code Playgroud)
...内...
MongoClient.connect("mongodb://localhost:27017/michael", function(err, db) {
Run Code Online (Sandbox Code Playgroud)
...但它在终端控制台日志中给出了错误.
提前致谢.
编辑:
这是我正在尝试做的,这给了我一个错误:
app.get('/', function(req, res){
MongoClient.connect("mongodb://localhost:27017/michael", function(err, db) {
if(!err) { …Run Code Online (Sandbox Code Playgroud) 我正在尝试为一个简单的项目建立一个基本的单元测试环境,但是我遇到了一个奇怪的障碍,经过数小时的研究后我无法克服这个障碍.
出于某种原因,我Error: NETWORK_ERR: XMLHttpRequest Exception 101直接从EJS返回尝试使用XHR加载模板,但只是偶尔使用一次.
案例很简单,我有一个骨干应用程序,实例化一个呈现EJS模板的骨干视图.这看起来像这样:
BackboneView = Backbone.View.extend({
initialize: function() {
this.template = new EJS({url: '/app/views/root/root.template.ejs'});
}
});
Run Code Online (Sandbox Code Playgroud)
要设置grunt-contrib-jasmine,我的Gruntfile中有以下代码段:
jasmine: {
cms: {
src: "app/**/*.js"
options: {
specs: "tests/fe/spec/*Spec.js",
vendor: [
"vendor/jquery/dist/jquery.js",
"vendor/underscore/underscore.js",
"vendor/backbone/backbone.js",
"vendor/ejs/ejs.js",
],
keepRunner : true,
outfile : "tests/fe/_SpecRunner.html",
host : "http://0.0.0.0:8000"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我大部分时间都可以运行我的测试套件:
$ grunt jasmine
Running "jasmine:cms" (jasmine) task
Testing jasmine specs via PhantomJS
log: came in request!, /app/views/root/root.template.ejs
log: 200
log: /app/views/root/root.template.ejs
website.header
header.test()
- test should return …Run Code Online (Sandbox Code Playgroud) 我正在寻找一个格式化我的ejs文件的包.我已经找到"html-css-js prettify"并将"ejs"设置为allowed_file_extensions,但这不起作用.当我在其他选项中使用de default配置时,所有表达式语言都破坏了.当我在数组"unformatted"中设置"%"时,忽略表达式语言旁边的所有代码.
你们有另一个ideia或插件与sublimeText 3一起使用吗?
我使用Sails.js和默认模板引擎(EJS).我有一个直接从routes config定义的视图:
配置/ routes.js
'/': {
view: 'homepage'
}
Run Code Online (Sandbox Code Playgroud)
有没有办法在homepage.ejs中访问环境?我需要这样的东西:
views/homepage.ejs(下一个不起作用,所以我需要一个有效的解决方案)
...
<span>Hello you are on <%= sails.env %> environment</span>
...
Run Code Online (Sandbox Code Playgroud)
呈现为:
Hello you are on production environment
Run Code Online (Sandbox Code Playgroud)
请不要建议我为此创建控制器.
我希望有办法直接从视图或路线中的当地人那里得到它,但是如何,这就是问题.
使用 ejs 将变量传递给 JavaScript 的公认方式似乎是这样的:
<script>
var foo = <%- JSON.stringify(foo) %>;
</script>
Run Code Online (Sandbox Code Playgroud)
但我使用这种方法遇到了 XSS 问题,并且想知道是否有更好/更安全的方法。
此示例显示了该漏洞。
这是有效的,因为JSON.stringify("</script><script>alert('test')</script><script>")返回"</script><script>alert('test')</script><script>"并且<%- %>运算符不会转义结果。
它也适用于对象:示例在这里
<script>
var test = {
"text": "</script><script>alert('test')</script><script>"
}
</script>
Run Code Online (Sandbox Code Playgroud)
有没有更安全的方法来处理这个问题?
目前我正在搞乱Node和EJS模板.
但是我遇到了问题.我建立了一个由多个组件组成的页面,我将这些组件调用到索引页面,如下所示:
<% include components/header.ejs %>
Run Code Online (Sandbox Code Playgroud)
我的问题是如何将数据(json)传递给特定的包含?
我希望能够重用组件,以显示来自json的不同内容.
谢谢
看起来如果图像标记在我的index.ejs模板中,我缺少在webpack配置中加载图像的设置.
我的项目中的html文件中的所有图像都在我的构建过程中被正确地重命名并加载,但.ejs文件中的图像标记被忽略.
即在我的.ejs中,如果我有<img src="../../home.png">它仍然是这样,但在正常的HTML文件中它改变为<img src="12345677.png">
我目前的装载机:
loaders: [
//HTML Files
{
test: /\.html$/,
loader: 'html'
},
//Transpile ES6 to ES5
{
test: /\.js$/,
include: path.join(__dirname, 'src'),
exclude: /node_modules/,
loader: 'babel',
query: {
presets: [
["es2015", {"module": false}]
]
}
},
//Extract Normal CSS
{
test: /\.css$/,
loader: ExtractTextPlugin.extract({ loader : 'css?sourceMap!autoprefixer', publicPath: "../"})
},
//Bundle Less into CSS Code
{
test: /\.less$/,
loader: ExtractTextPlugin.extract({ loader : 'css?sourceMap!autoprefixer!less?sourceMap', publicPath: "../"})
},
//Images
{
test: /\.(png|jpg|jpeg|gif|svg|woff|woff2|ttf|eot)$/,
loader: 'file'
} …Run Code Online (Sandbox Code Playgroud) 是否可以在节点/ ejs模板中使用console.log?当我尝试时,它似乎什么也没做,甚至是简单的事情:
<% console.log('test') %>
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
<%= console.log('test') %>
Run Code Online (Sandbox Code Playgroud)
控制台中什么都没有显示。
我遇到了一些麻烦,我目前正在尝试自学一些 NodeJS,但我陷入了困境。我正在尝试使用 Multer 上传文件,我已经完全正常工作,但我想在同一页面上显示上传文件的进度。因此,我使用进度流来显示它,我可以在控制台中完全打印它,但现在的问题是在上传文件的页面上显示它。
所以最后一个问题是:如何使用从变量“p”获得的输出来显示 upload.ejs 中的进度?
这是我目前的代码
用户.js
router.get('/upload', ensureAuthenticated, function(req, res){
res.render('authed/upload');
});
router.post('/upload-files', function(req, res){
var p = progress();
req.pipe(p);
p.headers = req.headers;
var sendStream = multer({ storage: storage }).any();
p.on('progress', function(progress){
console.log(progress);
})
console.log(req.files);
sendStream(p, res, function(){
console.log('file has been uploaded');
});
req.flash('success', 'File(s) have been uploaded!');
res.location('/upload');
res.redirect('/upload');
})
Run Code Online (Sandbox Code Playgroud)
上传.ejs
<% include ../partials/header %>
<% include ../partials/navbar %>
<div class="container">
<div class="row">
<div class="col-sm-12 file-upload-wrapper">
<%- messages() %>
<div class="w-100 text-center" style="padding-bottom: 2rem;">
<h2 id="fileupload-text">File …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Node js 在我的网站上配置 webpack,我还使用 ejs 作为视图。我尝试了很多方法来处理我的 webpack 中的 ejs,但到目前为止我还没有成功。
const path = require('path')
const nodeExternals = require('webpack-node-externals')
module.exports = (env, argv) => {
return ({
entry: {
server: './src/app.js',
},
output: {
path: path.join(__dirname, 'dist'),
publicPath: '/',
filename: 'main.js'
},
mode: argv.mode,
target: 'node',
node: {
// Need this when working with express, otherwise the build fails
__dirname: true,
__filename: true,
},
externals: [nodeExternals()], // Need this to avoid error when working with Express
module: {
rules: [
{ …Run Code Online (Sandbox Code Playgroud) ejs ×10
node.js ×7
javascript ×5
express ×3
webpack ×2
collections ×1
console ×1
ecmascript-6 ×1
json ×1
mongodb ×1
multer ×1
phantomjs ×1
sails.js ×1
sublimetext3 ×1
unit-testing ×1
xss ×1