Empty parameters sent to EJS on render - node.js

Im fairly new to nodejs, and Ive been suffering trying to solve this, and so far I cant find the problem.
At some point during my application I render a EJS template with some parameters, but it seems that even though the parameters are obtained, they are empty....
I tested the most basic case:
console.log(req.user);
res.render('menu.ejs', { user: String(req.user.username) });
the console outputs:
{ id: 1,
username: 'bob',
password: 'secret',
email: 'bob#example.com' }
So Im not sending an empty value.
The menu.ejs code is the following:
<html>
<body>
<% user %>
</body>
</html>
Really simple. But when the page is rendered all I get is an empty page... Even with a and some more HTML, I just keep getting and empty value for user...
At some point in my application I used passport to authenticate my user, and using flash, I managed to get a message through:
res.render('login.ejs', { message: req.flash('message') });
But that still leaves me with my menu.ejs error. Ive renamed the file, renamed the parameter passed, added more parameters, harcoded the values of the parameters passed... and I always get same the results =(
Project Dependencies:
"dependencies": {
"express": "~4.9.x",
"express-session": "1.9.3",
"mysql ": "2.5.3",
"body-parser": "1.10.0",
"passport": "0.2.1",
"passport-local": "1.0.0",
"connect-flash": "0.1.1",
"cookie-parser": "1.3.3",
"ejs": "1.0.0"
}
Any ideas?

Try to change
<% user %>
to
<%= user %>
since that is the usual syntax to output a template variable as far as I know.

Related

How to differentiate between a resolver call from federation and from client?

I am working in a GraphQL project using node + typegraphql + apollo-server.
My goal is to have specific metrics for regular queries, and separately, from federations. Is it possible to differentiate it in the server that is being requested and resolves the data?
By regular query I mean:
Client asks for User -> Apollo Gateway Server -> User Apollo Server resolves the User
And by a federated one I mean:
Client asks for Profile (which contains external User) -> Apollo Gateway Server -> User Apollo Server resolves the User
Apparently, this is possible using the DGS framework, #DgsQuery is for regular resolvers and #DgsEntityFetcher(name = "User") would work for the federation resolver.
The project related dependencies are:
"dependencies": {
"#apollo/federation": "^0.30.0",
"apollo-datasource-rest": "^3.1.1",
"apollo-graphql": "^0.9.3",
"apollo-server": "^3.1.2",
"apollo-server-express": "^3.1.2",
"graphql": "^15.5.1",
"graphql-tag": "^2.12.5",
"graphql-tools": "^8.1.0",
"type-graphql": "^1.1.1"
}
I ended up adding metrics inside the reference resolver, which is configured in the schema like the following:
import { addResolversToSchema } from 'apollo-graphql';
function resolveUserReference() {
// Resolve User + metrics
}
const referenceResolvers = {
User: { __resolveReference: resolveUserReference },
};
addResolversToSchema(yourFederatedSchema, referenceResolvers);

Error in mounted hook: "TypeError: Class constructor Node cannot be invoked without 'new'"

Bug
[Vue warn]: Error in mounted hook: "TypeError: Class constructor Node cannot be invoked without 'new'"
app.vue
<template>
<v-container>
<tiptap-vuetify
v-model="content"
:extensions="extensions" />
</v-container>
</template>
<script>
// import the component and the necessary extensions
import { TiptapVuetify, Heading, Bold, Italic, Strike, Underline, Code, Paragraph, BulletList, OrderedList, ListItem, Link, Blockquote, HardBreak, HorizontalRule, History ,TodoList,TodoItem} from 'tiptap-vuetify'
export default {
// specify TiptapVuetify component in "components"
components: { TiptapVuetify },
data: () => ({
content: `
<h3>TIPTAP</h3>`,
// declare extensions you want to use
extensions: [
History,
Blockquote,
Link,
Underline,
Strike,
Italic,
ListItem,
BulletList,
OrderedList,
[Heading, {
options: {
levels: [1, 2, 3]
}
}],
Bold,
Code,
HorizontalRule,
Paragraph,
HardBreak,
TodoList,
[TodoItem, {
options: {nested: true}
}],],
}),}
</script>
System information
OS: Windows10
version of Node.js:v14.15.1
Dependencies
"core-js": "^3.6.5",
"tiptap-vuetify": "^2.24.0",
"vue": "^2.6.11",
"vuetify": "^2.2.11"
repo
todo-List issue
I think you can do the following to force tiptap to transpile.
# vue.config.js
transpileDependencies: [
/[\\/]node_modules[\\/]tiptap.*/
],
The reason why we get this error is because we try to extend a native class with a transpiled class.
References:
TypeError
TipTap

Brunch with SugarSS (PostCSS parser)

How can I start using SugarSS parser with Brunch?
Here is the plugins part of my current config:
exports.config = {
...
plugins: {
babel: {
ignore: [/web\/static\/vendor/]
},
postcss: {
processors: [
require("postcss-cssnext")(["last 3 versions"]),
require("precss"),
require("lost")
]
},
cssnano: {
autoprefixer: {
add: false
}
}
}
...
};
And my package.json:
{
"repository": {},
"dependencies": {
"babel-brunch": "~6.0.0",
"brunch": "~2.1.3",
"css-brunch": "~1.7.0",
"cssnano": "^3.5.2",
"cssnano-brunch": "^1.1.5",
"javascript-brunch": "~1.8.0",
"lost": "^6.7.2",
"phoenix": "file:deps/phoenix",
"phoenix_html": "file:deps/phoenix_html",
"postcss-brunch": "^0.5.0",
"postcss-cssnext": "^2.5.1",
"postcss-scss": "^0.1.7",
"precss": "^1.4.0",
"sugarss": "^0.1.2",
"uglify-js-brunch": "~1.7.0"
}
}
The way PostCSS plugin for brunch works is, it's invoked after all the stylesheets were compiled and concatenated into a single file. (Brunch calls that an optimizer plugin)
Support of SugarSS or similar, however, will require creating of a custom compiler plugin, that will only transform sss into normal css.
It's actually easier than it sounds :) Use plugins.md as a plugin API reference. If it helps, take a look at stylus-brunch — https://github.com/brunch/stylus-brunch/blob/master/index.js.
What you'll basically need to change is:
compile() method, to invoke PostCSS with SugarSS parser and return a promise that resolves to an object with at least the data key (which in your case will be a string css)
change prototype.extension to be the extension you want to handle, sss in this case
you probably won't need stylus' constructor() and might not need the css modules support
you can release it so that other people looking to use SugarSS with Brunch won't have do this themselves. Sharing is caring, right? :)
(If you do go that route, it's customary to name brunch plugins with a suffix, like sugarss-brunch. You can also then include it in our list of plugins https://github.com/brunch/brunch.github.io/blob/master/plugins.json)
Hope this clears things up a bit. If you encounter any issues, feel free to either comment there or open an issue on our GitHub http://github.com/brunch/brunch

getting error with ember-fire: Assertion Failed: You must include an 'id' for undefined in an object passed to 'push'

I have a sample notebook app that works with ember-cli's HTTP mocks and also my rails backend using ActiveModelSerializer.
When I hook it to firebase with ember-fire, I am able to register a user (I see it in the dashboard) but when I try to retrieve it by email, I get the following warning:
WARNING: Encountered "0" in payload, but no model was found for model name "0" (resolved model name using ui#serializer:application:.modelNameFromPayloadKey("0"))
then this error:
Error: Assertion Failed: You must include an 'id' for undefined in an object passed to 'push'
at new Error (native)
at Error.EmberError (http://localhost:4200/assets/vendor.js:24735:21)
at assert (http://localhost:4200/assets/vendor.js:14636:13)
at Object.assert (http://localhost:4200/assets/vendor.js:22037:34)
at ember$data$lib$system$store$$Service.extend._pushInternalModel (http://localhost:4200/assets/vendor.js:75316:15)
at ember$data$lib$system$store$$Service.extend.push [as _super] (http://localhost:4200/assets/vendor.js:75302:34)
at push (http://localhost:4200/assets/vendor.js:94940:38)
at superWrapper [as push] (http://localhost:4200/assets/vendor.js:30984:22)
at http://localhost:4200/assets/vendor.js:70210:27
at Object.Backburner.run (http://localhost:4200/assets/vendor.js:9707:25)
I am querying the store using:
export default Ember.Route.extend({
actions: {
login: function() {
this.store.query('user', {
email: this.controller.get('email')
}).then((users) => {
if(users.get('length') === 1) {
var user = users.objectAt(0);
this.controllerFor('application').set('user',user);
this.transitionTo('notebooks', user.get('id'));
}
else {
console.log('unexpected query result');
}
});
}
}
});
Digging in, I can see by setting breakpoint at finders.js#157 I am about to
store._adapterRun(function () {
var payload = normalizeResponseHelper(serializer, store, typeClass, adapterPayload, null, 'query');
//TODO Optimize
records = store.push(payload);
});
push the payload. The adapter payload inspects to
adapterPayload: Array[1]
0: Object
email: "test#test.com"
first_name: "Test"
id: "-K1oINClDw2ylQLww7-p"
last_name: "User"
which is my user. So all's good except for the trace. Not sure about that ID but I am new to firebase; maybe it's ok. It matches what I see in my dashboard.
I haven't done anything special with my serializer -- it's vanilla.
import DS from 'ember-data';
export default DS.RESTSerializer.extend({
});
AFAIK I am using the latest & greatest -- here's bower.json
{
"name": "ui",
"dependencies": {
"ember": "2.1.0",
"ember-cli-shims": "ember-cli/ember-cli-shims#0.0.4",
"ember-cli-test-loader": "ember-cli-test-loader#0.1.3",
"ember-data": "2.1.0",
"ember-load-initializers": "ember-cli/ember-load-initializers#0.1.7",
"ember-qunit": "0.4.9",
"ember-qunit-notifications": "0.0.7",
"ember-resolver": "~0.1.18",
"jquery": "^2.1.4",
"loader.js": "ember-cli/loader.js#3.2.1",
"qunit": "~1.18.0",
"foundation": "~5.5.3",
"bootstrap": "~3.3.5",
"showdown": "~1.3.0",
"firebase": "^2.1.0"
}
}
and my dev dependencies in package.json
"devDependencies": {
"body-parser": "^1.14.1",
"broccoli-asset-rev": "^2.1.2",
"ember-cli": "1.13.8",
"ember-cli-app-version": "1.0.0",
"ember-cli-babel": "^5.1.3",
"ember-cli-dependency-checker": "^1.0.1",
"ember-cli-htmlbars": "1.0.1",
"ember-cli-htmlbars-inline-precompile": "^0.3.1",
"ember-cli-ic-ajax": "0.2.1",
"ember-cli-inject-live-reload": "^1.3.1",
"ember-cli-qunit": "^1.0.0",
"ember-cli-rails-addon": "0.0.12",
"ember-cli-release": "0.2.3",
"ember-cli-showdown": "2.5.0",
"ember-cli-sri": "^1.0.3",
"ember-cli-uglify": "^1.2.0",
"ember-data": "2.1.0",
"ember-disable-proxy-controllers": "^1.0.0",
"ember-export-application-global": "^1.0.3",
"emberfire": "1.6.0",
"express": "^4.13.3",
"glob": "^4.5.3",
"morgan": "^1.6.1",
"nedb": "^1.2.1"
}
Any pointers/help/guidance would be great! I am also new to ember too, so maybe I am missing the obvious?
You need a type key to be returned from your backend, rather than just sending an array. This lets Ember Data know what type of model you're pushing to the store. Your payload should look like this:
users: [
{
email: "test#test.com",
id: "abcdefg"
(...)
}
]
instead of this
[
{
email: "test#test.com",
id: "abcdefg"
(...)
}
]
Alternatively you can explicitly pass in the type and data:
store.push("user", store.normalize("user", response[0]));
(where response is still the array)

Zappa Error unable to find view (jade template)

I am trying a zappa node application and am unable to get it working beyond a trivial example.
I have application.coffee
require('zappajs') ->
#set views: "#{__dirname}/views"
#set 'view engine': 'jade'
#use 'bodyParser', 'methodOverride', #app.router, 'static'
#configure
development: => #use errorHandler: {dumpExceptions: on}
production: => #use 'errorHandler'
#get '/': -> #render 'index'
and i am getting an error. Zappa seems to be prepending a guid to the file name.
example/app/views/7b16eeab-de6f-41b0-b196-8f23f4b7237d/index.jade
Here is the complete trace
Error: ENOENT, no such file or directory '/Users/irfn/project/example/app/views/7b16eeab-de6f-41b0-b196-8f23f4b7237d/index.jade'
at Object.fs.openSync (fs.js:338:18)
at Object.fs.readFileSync (fs.js:182:15)
at Object.rethrow (/Users/irfn/project/example/node_modules/jade/lib/runtime.js:155:27)
at parse (/Users/irfn/project/example/node_modules/jade/lib/jade.js:116:13)
at Object.exports.compile (/Users/irfn/project/example/node_modules/jade/lib/jade.js:163:9)
at Function.exports.compile (/Users/irfn/project/example/node_modules/zappajs/node_modules/express/lib/view.js:68:33)
at ServerResponse.res._render (/Users/irfn/project/example/node_modules/zappajs/node_modules/express/lib/view.js:417:18)
at ServerResponse.res.render (/Users/irfn/project/example/node_modules/zappajs/node_modules/express/lib/view.js:318:17)
at Object.zappa.app.app.(anonymous function).apply.concat.render (/Users/irfn/project/example/node_modules/zappajs/lib/zappa.js:593:33)
at Object.zappa.app.app.(anonymous function).apply.concat.ctx.render (/Users/irfn/project/example/node_modules/zappajs/lib/zappa.js:545:31)
Here is how my package json dependencies are setup
"dependencies": {
"coffee-script": "1.3.3",
"underscore": ">= 1.3.3",
"stylus": ">= 0.28.2",
"zappajs": ">= 0.3.10",
"jade": ">= 0.18.0"
},
"devDependencies": {
"watchr": "*",
"mocha": "*",
"chai": "*",
"request": "*"
},
Came across this myself - did not have the time to track down the cause but there is an easy workaround:
instead of
#get / : ->
#render index: {key:value}
use the more old school connect-style
#app.get '/', (req,res) ->
res.render 'index', {key:value}
Hope this helps you get over the hump.
PS:
Come to think of it, I assume it might have something to do with the way zappa evaluates coffee(k/c)up templates by default. In this case it might be trying to apply that logic to jade which breaks.

Resources